原文地址:Laravel with() 使用 limit 或者 take 的问题
假设现在我想从每一篇文章中获取其中 15 条评论。
代码如下:
article::with(['comments' => function($query) {
$query->take(10);
}])->get();
执行以上代码,发现take()并没有作用。
因为 Laravel 只用一条语句预加载关系,当我们在关系中加入 take/limit 3 的时候,会导致该语句只返回三条comments,所以得到的结果就是第一篇 article 中有 comments,其余的都没有。
with 底层是 in 查询,in 查询后边跟 limit 没用的。
参考文章 : https://learnku.com/laravel/t/19470
article::with('comments')->get()->map(function($item){
$item->comments = $item->comments->take(15);
return $item;
});
模型中配置:
public function comments(){
return $this->hasMany('Modules\Type\Entities\comments', 'article_id', 'id')->limit(15);
}
代码实现:
$articles = Article::all(); // 获取文章
$articles->each(function ($articles) {
$articles->load('comments'); // 对每一篇文章加载对应评论
});
return $articles;
这样就可以实现从每一篇文章中获取其中 15 条评论咯
最新评论