填写名单时间表的最佳方式

时间:2013-01-28 07:45:48

标签: php mysql laravel eloquent blade

研究员,

我在PHP中使用框架构建了一个名单应用程序:Laravel。我有以下问题:

我的应用程序有:Users,Taskdate和TaskdateTime。每个用户都可以获得分配给他们的TaskdateTime。 TaskdateTime是Taskdate的子项。我想填写每个用户可以看到所有时间的计划。时间表如下:

enter image description here

我在我的应用程序中做的是:获取所有用户,获取所有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关系。工作日返回如上所述的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解析,但确实如此。

修改:

问题:

我的代码感觉很臃肿。我不认为这是实现结果的最有效方式。你对这个有什么看法?我希望尽可能高效。

0 个答案:

没有答案