我正在创建一个职责名册系统。我想在一行中显示每个职责名册日期。我能够,但它似乎非常手动的方式。我正在寻找更有效的方法来实现它。
目前,在视图文件中,每个职责,我都运行了一个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>
当我看到我的视图文件时,我知道某些内容不正确......它看起来很无效。知道如何改进吗?
答案 0 :(得分:0)
在此处分享我的解决方案: 也许不是最好的解决方案,但至少更清洁。
我创建了一个辅助函数: -
if (!function_exists('getDutyPersonName')) {
/**
* Blade Helper getDutyPersonName
*
* @param $duty
* @return boolean
*/
function getDutyPersonName($duty_roster, $duty)
{
$duty_name = $duty_roster->first(function ($value, $key) use ($duty) {
return $value->duty->key == $duty;
});
if(!is_null($duty_name))
return ($duty_name->user->name);
return '-';
}
}
在刀片视图文件中: -
<td>{{ getDutyPersonName($duty_roster, 'chair_person') }}