0

各位程序员,

我在 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 解析,但它是。

编辑 :

问题 :

我的代码感觉臃肿。我不认为这是实现结果的最有效方法。你对此有何看法?我喜欢尽可能高效。

4

0 回答 0