在1个查询

时间:2017-10-19 13:55:49

标签: php laravel eloquent query-builder

我试图检索(分页)帖子列表,并在一个Eloquent查询语句中包含他们最近的评论。帖子和评论通过一对多关系连接起来。

这是我的尝试:

Post::with(['comments' => function ($query) {
    $query->orderBy('created_at', 'asc')->take(3);
}])->simplePaginate(15);

但是,它只检索 3条评论,而不是每篇帖子3条评论。

3 个答案:

答案 0 :(得分:0)

更新

看来你不能用1个查询来做 您仍然可以在父模型中使用此函数,称为“lastComments”:

function lastComments()
{
    return $this->hasMany('App\Post', 'post_id')->orderBy('created_at')->take(3);
}

您使用正常的雄辩代码加载帖子:

Post::simplePaginate(15);

在视图页面中,您将以这种方式显示评论:

@foreach($post->lastComments as $comment)
    <!-- ... -->
@endforeach

答案 1 :(得分:0)

加入表格ID是必要的 试试这个:

 Post::with(array('comments'=>function($query){
            $query->select('id as commentid','comment')->orderBy('created_at', 'asc')->take(3);
        }))->simplePaginate(15);

答案 2 :(得分:0)

您需要在$with模型中设置App\Post变量:

protected $with = ['lastComments'];

这样,只要您获取帖子,Laravel就会自动加载评论。