各位程序员,
我在 PHP 中使用以下框架构建了一个名册应用程序:Laravel。我有以下问题:
我的应用程序有:用户、任务日期和任务日期时间。每个用户都可以获得分配给他们的 TaskdateTime。TaskdateTime 是 Taskdate 的子代。我想填充一个时间表,每个用户都可以看到他们所有的时间。时间表如下所示:
我在我的应用程序中所做的是:获取所有用户,获取所有任务日期,并根据任务日期,获取正确任务日期的任务日期时间。我通过以下方式执行此操作:
$taskdates = Taskdate::with('users')->where_date($date)->get();
$employees = Usergroup::with(array('users', 'users.workdates'))->where('usergroup_title', '=', 'Employees')->first();
你可以看到我获取用户组,关系为:用户,用户->工作日期关系。如上所述,工作日期返回 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。如果它是空的,那么不要回显任何东西。
HTML/PHP 的语法在 BLADE 中,所以它可能看起来不正确的 PHP 解析,但它是。
编辑 :
问题 :
我的代码感觉臃肿。我不认为这是实现结果的最有效方法。你对此有何看法?我喜欢尽可能高效。