2017-04-18 192 views
0

我有3个表格:posts,votesusers。我用Eloquent写了一个整洁的代码来检索用户尚未投票的帖子。如何从Laravel雄辩中的其他表中检索行?

$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

但是如果我想检索相对于当前用户的帖子。所以现在它删除已投票的帖子。但是我想删除当前用户之前投票过的帖子。 –