プログラマー仲間、
フレームワーク:Laravelを使用して、PHPでビルドされた名簿アプリケーションを取得しました。そして、私は次の問題を抱えています:
私のアプリケーションには、Users、Taskdate、および TaskdateTime があります。各ユーザーは、割り当てられた TaskdateTime を取得できます。その TaskdateTime は Taskdate の子です。各ユーザーがすべての時間を表示できるスケジュールを作成したいと考えています。スケジュールは次のようになります。
私のアプリケーションで行うことは次のとおりです。すべてのユーザーを取得し、すべての Taskdate を取得し、Taskdate に従って、適切な Taskdate の TaskdateTime を取得します。私は次の方法でこれを行います:
$taskdates = Taskdate::with('users')->where_date($date)->get();
$employees = Usergroup::with(array('users', 'users.workdates'))->where('usergroup_title', '=', 'Employees')->first();
関係 : Users および User->workdates 関係で、ユーザーグループを取得していることがわかります。上記のように、workdates が TaskdateTime オブジェクトを返す場所。
私の見解では、これを行ってデータを入力します。そして、これは余分な手間がかかるようで、もっと簡単にできると思いますが、頭を包むことはできません. とにかく、これはコードです:
<table id="plan" class="table table-bordered">
<thead>
<th></th>
@foreach($taskdates as $taskdate)
<th id="{{ $taskdate->id }}">{{ $taskdate->subject }}</th>
@endforeach
</thead>
<tbody>
@foreach($employees as $employee)
<tr id="{{ $employee->id }}">
<td>{{ $employee->name }}</td>
@foreach($taskdates as $taskdate)
<?php
$result = array_filter($employee->workdates, function($user) use ($taskdate){
return $user->id === $taskdate->id;
});
?>
@if( empty($result) )
<td></td>
@else
<td id="{{$result[key($result)]->pivot->id }}" style="{{ ($result[key($result)]->pivot->taskdate_isread) ? '' : 'font-weight:bold;'}}">
{{date('H:i', strtotime($result[key($result)]->pivot->taskdate_time))}}
</td>
@endif
@endforeach
</tr>
@endforeach
</tbody>
</table>
そのため、Taskdate ID を保持している場合、各ユーザーの workdates 関係全体をフィルタリングしています。空の場合は、何もエコーしません。
HTML/PHP の構文は BLADE にあるため、PHP の解析が正しくないように見えるかもしれませんが、そうです。
編集 :
質問 :
私のコードは肥大化しています。これが結果を達成するための最も効率的な方法だとは思いません。これについてどう思いますか。私はできるだけ効率的であることが好きです。