Огромное спасибо @Michael в комментариях за то, что указал мне в этом направлении. По его мнению, помогло разбиение этого на части, а затем обертывание вспомогательной группировки и суммы во второй карте.
Это прекрасно. Вот код:
App\Groupshot::findOrNew(4)
->load('snapshots.answers.question.tags', 'snapshots.participant')
->answers->groupBy([
function ($item, $key) {
return [$item->question->tags()->first()->name];
},
])
->map(function ($row) {
return $row
->groupBy([
function ($item, $key) {
return [$item->participant->FullName];
},
])
->map(function ($row) {
return $row->sum('answer');
});
});
и результат
=> Illuminate\Support\Collection {#4354
all: [
"FEAR" => Illuminate\Support\Collection {#3670
all: [
"Gavin Ellis" => 6,
"Naomi Lloyd" => 10,
"Jonathan Walsh" => 18,
"Reece Kelly" => 17,
"Connor Wood" => 3,
"Keith Price" => 4,
"Joe Phillips" => 5,
"Bradley Clarke" => 6,
"Superadministrator Superadministrator" => 6,
"Elsie Reynolds" => 12,
],
},
"RAGE" => Illuminate\Support\Collection {#3972
all: [
"Gavin Ellis" => 22,
"Naomi Lloyd" => 10,
"Jonathan Walsh" => 12,
"Reece Kelly" => 29,
"Connor Wood" => 13,
"Keith Price" => 10,
"Joe Phillips" => 17,
"Bradley Clarke" => 25,
"Superadministrator Superadministrator" => 6,
"Elsie Reynolds" => 10,
],
},