2017-04-18 10 views
0

私は3つのテーブル:posts,votesおよびusersを持っています。私はEloquentを使ってきれいなコードを書いて、ユーザーがまだ投票していない投稿を検索します。Laravel Eloquentの別のテーブルから行を取得するにはどうすればよいですか?

$posts = Post::whereDoesntHave("votes") 
        ->where('user_id', '=', $user_id) 
        ->whereBetween('posts.created_at', array(Carbon::now()->subHours(48), Carbon::now())) 
        ->take(20) 
        ->get(); 

return response()->json(['posts' => $posts])->withCallback($request->input('callback')); 

また、テーブルユーザーからユーザー名を取得したいと考えています。私はjsonでデータを渡したいと思います。

私が質問ビルダーでそれをやろうとすると、既にユーザーによって投票された投稿を削除することは難しいです。

答えて

1

あなたはユーザーテーブル

$posts = Post::join('users', 'users.id', '=', 'posts.user_id') 
       ->whereDoesntHave("votes") 
       ->where('user_id', '=', $user_id) 
       ->whereBetween('posts.created_at', array(Carbon::now()->subHours(48), Carbon::now())) 
       ->take(20) 
       ->get(); 

に手動で参加行うこともできますし、Postモデルクラスにrelationshipを定義することができます。

public function user() 
{ 
    return $this->belongsTo('App\User'); 
} 

次に、with('user')を使用して、ユーザーテーブルからデータを取得します。

$posts = Post::with('user') 
       ->whereDoesntHave("votes") 
       ->where('user_id', '=', $user_id) 
       ->whereBetween('posts.created_at', array(Carbon::now()->subHours(48), Carbon::now())) 
       ->take(20) 
       ->get(); 
+0

ありがとう、完璧に働いています! –

+0

ですが、現在のユーザーとの相対的なポストを取得したい場合それで、今投票された投稿を削除します。しかし、私は、現在のユーザーによって以前に投票された投稿を削除したいと思います。 –

関連する問題