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

Laravel Blade模板中如何正确统计并显示单元总数?

解决Laravel Blade中显示单元总数的问题

首先,你当前写的 {{ ($unit->unit_id)->count() }} 是错误的——$unit->unit_id 是单个字段值(比如一个整数ID),并不是集合/查询构建器实例,所以没法调用 count() 方法。结合你提供的Blade模板结构(开发者→项目→单元的层级关系),我给你两种常用的解决方案:

方案1:利用Eloquent关联统计总单元数(推荐)

如果你的模型关联已经正确定义(Developer hasMany Project,Project hasMany Unit),可以直接通过关联统计来获取总数,还能避免N+1查询问题。

步骤1:在Developer模型中定义关联

在app/Models/Developer.php里添加一个hasManyThrough关联,直接关联到单元:

public function units()
{
    return $this->hasManyThrough(
        Unit::class, // 最终关联的模型
        Project::class, // 中间模型
        'developer_id', // Project表中关联Developer的外键
        'project_id', // Unit表中关联Project的外键
        'id', // Developer表的主键
        'id' // Project表的主键
    );
}

步骤2:控制器预加载关联

在查询开发者数据时,预加载units关联,避免重复查询数据库:

$developer = Developer::with('units')->get();

步骤3:Blade模板中直接调用统计

在对应<td>里直接输出总数:

<td>{{ $data->units->count() }}</td>

方案2:循环累加计算总数(快速实现)

如果不想修改模型关联,也可以在Blade模板里通过循环累加每个项目的单元数:

<td>
    @php
        $totalUnits = 0;
        // 遍历当前开发者的所有项目
        foreach($data->projects as $project) {
            // 累加每个项目的单元数(假设项目关联的单元是$project->units)
            $totalUnits += $project->units->count();
        }
    @endphp
    {{ $totalUnits }}
</td>

⚠️ 注意:这种方式要记得在控制器预加载projects.units关联,否则会触发大量重复查询:

$developer = Developer::with('projects.units')->get();

额外优化:使用访问器简化模板

如果需要多次使用这个总数,可以在Developer模型中添加一个访问器:

// Developer.php
protected $appends = ['total_units'];

public function getTotalUnitsAttribute()
{
    // 利用sum方法直接计算所有项目的单元数总和
    return $this->projects->sum(fn($project) => $project->units->count());
}

之后在模板里就可以直接写:

<td>{{ $data->total_units }}</td>

内容的提问来源于stack exchange,提问作者Ho Wei Kang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:51:07