私はデューティ名簿システムを作成しています。私はそれぞれのデューティ・ロスターの日付を1列に表示したいと思います。私はそれにできるが、それは非常に手動のように思える。私はそれを達成するためのより効果的な方法を探しています。Laravelは単一行に対応できます
現在、ビューファイルでは、それぞれの義務、私は1つforeachを実行しており、それ以外は義務の役割を確認しています。特定の義務がない場合は、列に「 - 」の表示が繰り返されます。
以下は私のテーブル構造です。
標準のLaravel Usersテーブルがあります。
duties
: -
+----+----------------+-----------------+--------+---------------------+---------------------+
| id | key | name | status | created_at | updated_at |
+----+----------------+-----------------+--------+---------------------+---------------------+
| 1 | perfoman | Perfoman | Active | 2017-12-12 15:56:26 | 2017-12-12 15:56:26 |
| 2 | chair_person | Chair Person | Active | 2017-12-12 15:56:26 | 2017-12-12 15:56:26 |
| 3 | song_leader | Song Leader | Active | 2017-12-12 15:56:26 | 2017-12-12 15:56:26 |
| 4 | backup_singer1 | Backup Singer 1 | Active | 2017-12-12 15:56:26 | 2017-12-12 15:56:26 |
| 5 | guitarist | Guitarist | Active | 2017-12-12 15:56:26 | 2017-12-12 15:56:26 |
| 6 | usher1 | Usher 1 | Active | 2017-12-12 15:56:26 | 2017-12-12 15:56:26 |
| 7 | usher2 | Usher 2 | Active | 2017-12-12 15:56:26 | 2017-12-12 15:56:26 |
| 8 | pa | PA SYS | Active | 2017-12-12 15:56:26 | 2017-12-12 15:56:26 |
| 9 | projector | Projector | Active | 2017-12-12 15:56:26 | 2017-12-12 15:56:26 |
+----+----------------+-----------------+--------+---------------------+---------------------+
これは私のduty_rosters
テーブルです: -
+----+------------+---------+---------+---------------------+---------------------+
| id | duty_date | duty_id | user_id | created_at | updated_at |
+----+------------+---------+---------+---------------------+---------------------+
| 13 | 2017-12-16 | 1 | 1 | 2017-12-12 16:52:48 | 2017-12-12 16:52:48 |
| 14 | 2017-12-16 | 2 | 1 | 2017-12-12 16:52:48 | 2017-12-12 16:52:48 |
| 15 | 2017-12-16 | 3 | 1 | 2017-12-12 16:52:48 | 2017-12-12 16:52:48 |
| 16 | 2017-12-23 | 1 | 2 | 2017-12-12 16:57:15 | 2017-12-12 16:57:15 |
| 17 | 2017-12-23 | 2 | 2 | 2017-12-12 16:57:15 | 2017-12-12 16:57:15 |
| 18 | 2017-12-23 | 3 | 2 | 2017-12-12 16:57:15 | 2017-12-12 16:57:15 |
| 19 | 2017-12-23 | 4 | 2 | 2017-12-12 16:57:15 | 2017-12-12 16:57:15 |
+----+------------+---------+---------+---------------------+---------------------+
インサイドコントローラー: -
$duty_rosters = DutyRoster::with(['user', 'duty'])->get();
$duty_rosters = $duty_rosters->groupBy('duty_date');
これは私のコレクションの出力である: -
Collection {#647 ▼
#items: array:2 [▼
"2017-12-16" => Collection {#612 ▼
#items: array:3 [▼
0 => DutyRoster {#576 ▶}
1 => DutyRoster {#577 ▶}
2 => DutyRoster {#578 ▶}
]
}
"2017-12-23" => Collection {#535 ▶}
]
}
私のビューファイルには、デューティロールの各列を表示するテーブルがあります。
<table class="table table-hover">
<tbody><tr>
<th>Date</th>
<th>Perfoman</th>
<th>Chair Person</th>
<th>Song Leader</th>
<th>Backup Singer</th>
<th>Guitarist</th>
<th>Usher</th>
<th>PA SYS</th>
<th>Projector</th>
</tr>
@forelse($duty_rosters as $date => $duty_roster)
<tr>
<td>{{ $date }}</td>
<td>@foreach($duty_roster as $duty) @if($duty->duty->key == 'perfoman'){{ $duty->user->name }}@else {{ '-' }} @endif @endforeach </td>
<td>@foreach($duty_roster as $duty) @if($duty->duty->key == 'chair_person'){{ $duty->user->name }}@else {{ '-' }} @endif @endforeach </td>
<td>@foreach($duty_roster as $duty) @if($duty->duty->key == 'song_leader'){{ $duty->user->name }}@else {{ '-' }} @endif @endforeach </td>
<td>@foreach($duty_roster as $duty) @if($duty->duty->key == 'backup_singer1'){{ $duty->user->name }}@else {{ '-' }} @endif @endforeach </td>
<td>@foreach($duty_roster as $duty) @if($duty->duty->key == 'usher1'){{ $duty->user->name }}@else {{ '-' }} @endif @endforeach </td>
<td>@foreach($duty_roster as $duty) @if($duty->duty->key == 'usher2'){{ $duty->user->name }}@else {{ '-' }} @endif @endforeach </td>
<td>@foreach($duty_roster as $duty) @if($duty->duty->key == 'pa'){{ $duty->user->name }}@else {{ '-' }} @endif @endforeach </td>
<td>@foreach($duty_roster as $duty) @if($duty->duty->key == 'projector'){{ $duty->user->name }}@else {{ '-' }} @endif @endforeach </td>
</tr>
@empty
<tr>
<td colspan="100">No Data</td>
</tr>
@endforelse
</tbody>
</table>
私のビューファイルが表示されるとき、私は何かが正しくないと知っています...それはとても効果がありません。どのようにそれを改善するためのアイデア?