2017-12-12 9 views
1

私はデューティ名簿システムを作成しています。私はそれぞれのデューティ・ロスターの日付を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> 

私のビューファイルが表示されるとき、私は何かが正しくないと知っています...それはとても効果がありません。どのようにそれを改善するためのアイデア?

答えて

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') }}

関連する問題