登录

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

Laravel
0 437
问题

假设现在我想从每一篇文章中获取其中 15 条评论。代码如下:

article::with(['comments' => function($query) {
    $query->take(10);
}])->get();

PHPCopy

执行以上代码发现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;
});

PHPCopy

二、使用 load 方法

模型中配置:

public function comments(){
    return $this->hasMany('Modules\Type\Entities\comments' 'article_id' 'id')->limit(15);
}

PHPCopy

代码实现:

$articles = Article::all(); // 获取文章

$articles->each(function ($articles) {
    $articles->load('comments'); // 对每一篇文章加载对应评论
});

return $articles;

PHPCopy

这样就可以实现从每一篇文章中获取其中 15 条评论咯

发表评论

0 个回复

1xBet

1xBet

242 2017-05-15 加入 天津

(有时候读书是一种巧妙地避开思考的方法)

热门推荐

友情连接