Как сгруппировать и суммировать столбец сводной таблицы в отношениях Eloquent?
В Ларавеле 4; У меня есть модельProject
а такжеPart
, они имеют отношение многие ко многим с помощью сводной таблицыproject_part
, Сводная таблица имеет столбецcount
который содержит номер идентификатора детали, используемого в проекте, например:
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
дважды, поэтому я группирую результаты.
мойпроектов Модель имеет это:
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
Я бы очень хотел иметь его вProjects
-Parts
отношения, поэтому я могу загрузить его.
Я не могу обернуть голову, как это сделать, не получив проблемы N + 1, любая оценка приветствуется.
Обновить: В качестве временного решения я создал метод презентатора, чтобы получить общее количество деталей в проекте. Но это дает мне проблему 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;
}