Laravel可以单行

时间:2017-12-12 10:13:01

标签: laravel laravel-5

我正在创建一个职责名册系统。我想在一行中显示每个职责名册日期。我能够,但它似乎非常手动的方式。我正在寻找更有效的方法来实现它。

目前,在视图文件中,每个职责,我都运行了一个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>

当我看到我的视图文件时,我知道某些内容不正确......它看起来很无效。知道如何改进吗?

1 个答案:

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