php - 如何在 laravel 中自定义分页以显示每个页面的多个元素
问题描述
我的应用程序基本上为某些用户生成报告我从数据库中获取行每行包含一个“名称”和“工作时间”以及其他......每个用户都有多个具有相同名称但不同工作时间值的行我计算了刀片中的“工作时间”总数取决于下一行如果它的名称相同,我将继续添加工作时间,如果下一行是另一个用户,那么我将显示当前用户的总数并开始计算下一个用户的总数我的问题是分页:在每个页面的末尾,同一用户的行并没有全部出现,我的刀片逻辑只计算该页面上出现的内容(见图)
是否有任何方法可以告诉分页器在除该数字之外的条件下设计行,->paginate(15+condition)
因为我希望特定用户的所有行都保留在同一页面上。
这是查询:
$shifts = DB::table('driver_shifts')
->join('drivers','drivers.PermitNumber','=','driver_shifts.driver_badge_id')
->where ('driver_shifts.shift_start_time','>',$startDate)
->where ('driver_shifts.shift_start_time','<',$endDate)
->orderby('drivers.LastName')
->orderby('driver_shifts.shift_start_time')
->paginate(20)
->appends(request()->query());
这是表内的刀片逻辑。Ps:我知道这不是一个好习惯,但我在控制器中找不到更好的方法:
$total_time = 0.00;
$break_time = 0.00;
$work_time = 0.00;
for ($i = 0; $i < count($shifts); $i++)
{
$break_time_item = $shifts[$i]->total_time - $shifts[$i]->work_time;
echo '<tr>';
echo '<td>' . $shifts[$i]->FirstName . ' ' . $shifts[$i]->LastName . '</td>';
echo '<td>' . $shifts[$i]->vehicle_id . '</td>';
echo '<td>' . $shifts[$i]->shift_start_time . '</td>';
echo '<td>' . $shifts[$i]->shift_end_time . '</td>';
echo '<td>' . $shifts[$i]->total_time . '</td>';
echo '<td>' . $break_time_item . '</td>';
echo '<td>' . $shifts[$i]->work_time . '</td>';
echo '</tr>';
//calculation totals for the current driver
//dd($shifts[$i]->break_time);
$total_time = $total_time + $shifts[$i]->total_time;
$work_time = $work_time + $shifts[$i]->work_time;
if (isset($shifts[$i + 1]))
{
if ($shifts[$i]->LastName !== $shifts[$i + 1]->LastName)
{
//calculating break time
$break_time = $total_time - $work_time;
//converting minutes to houres
$total_time_hours = floor($total_time / 60);
$total_time_min = $total_time - ($total_time_hours * 60);
$work_time_hours = floor($work_time / 60);
$work_time_min = $work_time - ($work_time_hours * 60);
$break_time_hours = floor($break_time / 60);
$break_time_min = $break_time - ($break_time_hours * 60);
echo '<tr class="table-primary text-uppercase ">';
echo '<td colspan="4">' . $shifts[$i]->FirstName . ' ' . $shifts[$i]->LastName . ' TOTAL ' . '</td>';
if ($total_time_hours == 0 && $total_time_min == 0)
{
echo '<td>-</td>';
}
else
{
echo '<td>' . $total_time_hours . "h:" . $total_time_min . "min" . '</td>';
}
if ($break_time_hours == 0 && $break_time_min == 0)
{
echo '<td>-</td>';
}
else
{
echo '<td>' . $break_time_hours . "h:" . $break_time_min . "min" . '</td>';
}
if ($work_time_hours == 0 && $work_time_min == 0)
{
echo '<td>-</td>';
}
else
{
echo '<td>' . $work_time_hours . "h:" . $work_time_min . "min" . '</td>';
}
echo '</tr>';
$total_time = 0;
$break_time = 0;
$work_time = 0;
}
}
解决方案
推荐阅读
- reactjs - React Native:如何将 Google 日历连接到我的应用程序并获取访问/刷新令牌?
- image-processing - 制作厚度相似的手写数字图像的技术?
- python-3.x - GStreamer构建Windows无法导入_giscanner
- python - 等待流式异步任务完成
- .net - Serilog 未从控制台应用程序写入文本文件
- angular - 如何在构建时压缩图像
- javascript - 关闭特定站点的所有浏览器选项卡
- powershell - 使用powershell对文件夹中的多个csv文件进行排序
- linux - 如何在 Amazon linux 2 上启用 cgroups V2
- linux - 在 Linux 中将 VLAN ID 设置为 0