2017-10-19 66 views
0

我试图检索(分页)帖子列表,并在一个Eloquent查询语句中包含其最新评论。帖子和评论通过一对多关系相连。在1个查询中检索所有帖子及其最新评论

这是我的尝试:

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

但是,只检索总3条评论,平均每个职位不是3个评论。

+1

我不认为laravel允许你限制渴望加载的关系。我会建议迭代后数组并加载评论,例如: $ posts = Post :: simplePaginate(15); foreach($ posts as post){$ post-> load(['comments'=> function($ query){$ query-> orderBy('created_at','asc') - > take(3);}]) ' – pseudoanime

回答

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 
+0

据我可以看到,产生相同的结果,总共只有3条评论加载。 – Antiz

+0

我更新了答案 –

0

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

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

这并没有为我产生任何结果。选择函数('comment')的第二个参数有什么用? – Antiz

0

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

protected $with = ['lastComments']; 

这只要你取一个帖子的方式,Laravel会自动加载的意见吧。

相关问题