(转载)Laravel with() 使用 limit 或者 take 的问题

原文地址: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;
});

二、使用 load 方法


模型中配置:

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 条评论咯

飞行猿博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论