Laravel Eloquent Relationship问题

时间:2015-04-20 17:25:26

标签: laravel eloquent

我有三个模特 - 博客,帖子,评论。 博客有很多帖子 帖子有很多评论

当我写

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)

如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望获得特定用户评论过的所有帖子。

到目前为止,whereHas()可能正是您所寻找的。这就是你如何做到的。

return Blog::with('posts.comments')
                ->whereHas('posts.comments', function($q) use ($user){
                  $q->where('comments.user_id', $user->id);
              })->get();

来源:http://laravel.com/docs/5.0/eloquent#querying-relations

答案 1 :(得分:0)

你可以试试这个:

return Blog::with([ 'posts', 'posts.comments' => function($query)
{
    $query->where('comments.user_id', '23');
}])->get();