You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel模型的$with属性中添加limit()限制?

Laravel模型$with属性中限制预加载关联数量的解决办法

你之前的写法报错,是因为$with属性的数组元素只支持关联名称字符串(比如'user')或者带字段选择的字符串(比如'user:id,display_name'),不能直接传闭包进去。要实现需求,有两种靠谱的方式:

方式一:自定义带限制的关联方法

在模型里新增一个带数量限制的关联方法,然后在$with里引用它:

// 定义带限制的关联(根据实际关联类型调整,比如hasMany/belongsToMany等)
public function limitedLawyers()
{
    return $this->hasMany(Lawyer::class)->limit(4);
}

// 配置$with属性
protected $with = [
    'user:id,display_name',
    'limitedLawyers'
];

方式二:通过全局作用域动态添加带条件的预加载

如果不想新增关联方法,可在模型的booted方法里添加全局作用域,自动给查询加上带限制的预加载:

protected static function booted()
{
    static::addGlobalScope('loadLimitedLawyers', function ($query) {
        $query->with(['lawyer' => function ($q) {
            $q->limit(4);
        }]);
    });
}

// 保留$with里的基础预加载
protected $with = ['user:id,display_name'];

注意:如果lawyer是belongsTo一对一关联,limit(4)没有实际意义(一对一只会返回单条记录);仅当关联为一对多/多对多类型时,上述限制逻辑才会生效。

内容的提问来源于stack exchange,提问作者yossi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:43:11