此代码未经测试,但理论上应该可以工作。我尝试从您发布的代码中收集有关您的模型关系的信息,但可能需要对模型名称和关系进行一些调整。
以下代码基本上获取所有用户,每个用户都有area、candidate 和candidate.election 关系,然后按“选举名称”(第一个条件)和“区域名称”(第二个条件)对用户进行分组。
生成的数组将是这样的:
// $elections will be:
// [
// 'Presidential' => [
// 'Dhaka-5' => [ candidates for that area in that election type ],
// 'Dhaka-1' => [ candidates for that area in that election type ],
// ...
// ],
// ...
// ]
在您的控制器中执行:
$elections = User::with('area', 'candidate.election')->get()->groupBy(function ($user) {
return $user->candidate->election->name;
}, function ($user) {
return $user->area->name;
});
// then pass $elections to the view...
那么在你看来:
<table>
@php ($i = 1)
@foreach ($elections as $election => $areas)
@foreach ($areas as $area => $candidates)
@php ($areaLoop = $loop)
@foreach ($candidates as $user)
<tr>
<td>{{ $i++ }}</td>
<td>{{ $user->name }}</td>
@if ($loop->first)
<td rowspan="{{ $candidates->count() }}">{{ $area }}</td>
@endif
@if ($areaLoop->first)
<td rowspan="{{ $areas->sum(function ($area) { return $area->count(); }); }}">{{ $election }}</td>
@endif
</tr>
@endforeach
@endforeach
@endforeach
</table>
请注意,$candidates->count() 将是当前选举类型的特定选举区域的候选人人数。 $areas->sum(...) 将对每个区域的候选人人数求和,以获得该选举类型的候选人总数。
如果您需要进一步的解释或某些东西不起作用,请告诉我。我使用的所有关于收集函数的文档都可以在here 获得。