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

Laravel中如何使用loadCount统计多层关联模型数量?

解决Laravel嵌套关联计数的问题

首先确保你的Factory模型已经正确定义了与Category的关联:

class Factory extends Model
{
    use HasFactory;

    public function categories()
    {
        return $this->hasMany(Category::class);
    }
}

正确的关联计数写法

你之前使用loadCount('categories.products')报错,是因为loadCount不支持直接用点语法指定嵌套关联。要给每个分类统计产品数量,有两种常用写法:

方法1:查询时直接嵌套统计

在查询Factory的同时,给关联的categories加上产品计数:

$factories = Factory::with(['categories' => function ($query) {
    $query->withCount('products');
}])->get();

// PHP 7.4+ 可用短闭包简化:
$factories = Factory::with(['categories' => fn($q) => $q->withCount('products')])->get();

方法2:已获取集合后追加统计

如果已经拿到了$factories集合,再通过load方法追加分类的产品计数:

$factories = Factory::get();
$factories->load(['categories' => fn($q) => $q->withCount('products')]);

获取产品数量

完成上述操作后,每个Category实例会自动生成一个products_count属性,直接访问即可获取对应分类的产品数量:

// 遍历输出示例
foreach ($factories as $factory) {
    echo "工厂名称:{$factory->name}\n";
    foreach ($factory->categories as $category) {
        echo "分类名称:{$category->name},产品数量:{$category->products_count}\n";
    }
}

可选:封装查询作用域(优化代码复用)

如果需要多次使用这个统计逻辑,可以在Category模型里定义一个查询作用域:

// Category模型
public function scopeWithProductCount($query)
{
    return $query->withCount('products');
}

之后使用时就可以简化成:

$factories = Factory::with(['categories' => fn($q) => $q->withProductCount()])->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:14:58