我有三个模特 - 博客,帖子,评论。 博客有很多帖子 帖子有很多评论
当我写
return Blog::with('posts','posts.comments')->get();
它将为所有博客提供帖子和评论。
但是我将如何获得由管理员用户创建的博客,即在评论表中的user_id。在哪里写->where
条件。
return Blog::with('posts','posts.comments')->where('comments.user_id','=','23')->get();
给出错误。
SQLSTATE[42P01]: Undefined table: 7 ERROR: missing FROM-clause entry for table "comments"
LINE 1: select * from "blogs" where "comments"."is_...
^ (SQL: select * from "blogs" where "comments"."user_id" = 23)
如何解决这个问题。
答案 0 :(得分:1)
如果我理解正确,您希望获得特定用户评论过的所有帖子。
到目前为止,whereHas()
可能正是您所寻找的。这就是你如何做到的。
return Blog::with('posts.comments')
->whereHas('posts.comments', function($q) use ($user){
$q->where('comments.user_id', $user->id);
})->get();
答案 1 :(得分:0)
你可以试试这个:
return Blog::with([ 'posts', 'posts.comments' => function($query)
{
$query->where('comments.user_id', '23');
}])->get();