Project
和 Part
的模型,它们之间存在多对多的关系,并使用一个名为 project_part
的中间表来实现。中间表包含一个名为 count
的列,用于表示每个部件 ID 在项目中使用的次数,例如:id project_id part_id count
24 6 230 3
这里的project_id
为6,使用了3个part_id
为230的零件。
同一项目中可能会多次列出同一零件,例如:
id project_id part_id count
24 6 230 3
92 6 230 1
当我展示我的项目的部件清单时,我不希望重复显示part_id
,因此我将结果分组。
我的Projects模型如下:
public function parts()
{
return $this->belongsToMany('Part', 'project_part', 'project_id', 'part_id')
->withPivot('count')
->withTimestamps()
->groupBy('pivot_part_id')
}
但是我的count
值当然不正确,这里就出现了我的问题:如何获得项目所有分组部分的总和?
也就是说,我的project_id
为6的零件清单应该是这样的:
part_id count
230 4
我希望它能在项目
-零件
关系中,这样我就可以急切加载它。
我无法理解如何在不出现N+1问题的情况下做到这一点,任何见解都将不胜感激。
更新: 作为一个临时的解决办法,我创建了一个Presenter方法来获取项目中零件的总数。但这给我带来了N+1问题。
public function sumPart($project_id)
{
$parts = DB::table('project_part')
->where('project_id', $project_id)
->where('part_id', $this->id)
->sum('count');
return $parts;
}