首页 > 解决方案 > 如何在 laravel 中的 with() 方法之后限制查询

问题描述

我有 2 个模型。PostModel 和 CategoriesModel。

class PostModel extends Model
{
    protected $table='posts';
    protected $primaryKey = 'id';
    protected $guarded=['id'];

    public function categories()
    {
        return $this->belongsTo(CategoriesModel::class);
    }
}

class CategoriesModelextends Model
{
    protected $table='categories';
    protected $primaryKey = 'id';
    protected $guarded=['id'];

    public function posts()
    {
        return $this->hasMany(PostModel::class);
    }
}

我想获得 6 个类别和 10 个帖子。我在控制器中使用了这段代码

$categories = CategoriesModel::with(['pages' => function($query) {
        $query->limit('10');
    }])->take("6")->get();

但是这段代码是错误的。它适用于所有记录。但事实是,此查询适用于每个类别。请帮助我。谢谢

标签: phplaraveleloquentlaravel-collection

解决方案


有一个专门用于此的 laravel 包,称为 Eloquent Eager Limit

安装后:

composer require staudenmeir/eloquent-eager-limit:"^1.0"

您应该在应用有限预加载的模型中使用它:

class PostModel extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
 // ........
}

class CategoriesModel
extends Model
{

use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
 // ........
}

现在这个查询将得到你想要的结果:

$categories = CategoriesModel::with(['pages' => function($query) {
        $query->limit('10');
    }])->take("6")->get();

推荐阅读