Php Laravel group by子句
我有一个非常困难的情况,我一直试图找到一个解决方案,要么与查询生成器或雄辩,但没有运气好几天 我有一个数据库表/雄辩模型“出勤”,包含以下字段: id、员工id、时间表id、出勤时间“日期时间” 此表表示特定分支中每个员工的指纹日志 timesheet_id:表示员工白天的工作班次,我有两个:Php Laravel group by子句,php,laravel,eloquent,laravel-query-builder,Php,Laravel,Eloquent,Laravel Query Builder,我有一个非常困难的情况,我一直试图找到一个解决方案,要么与查询生成器或雄辩,但没有运气好几天 我有一个数据库表/雄辩模型“出勤”,包含以下字段: id、员工id、时间表id、出勤时间“日期时间” 此表表示特定分支中每个员工的指纹日志 timesheet_id:表示员工白天的工作班次,我有两个: 一个从早上6点到下午3点 从下午3点到第二天凌晨12点的两次“导致问题的原因” 现在我想做一份月度报告,在特定的时间段(比如从2020年9月1日到2020年9月30日)获取此表中的所有数据,这对于轮班
- 一个从早上6点到下午3点
- 从下午3点到第二天凌晨12点的两次“导致问题的原因”
$start = "2020/09/01 00:00:00";
$end = "2020/10/01 06:00:00";
$branch_id = 1;
$timesheet = 2; // employees who work from 3pm to 00 am
$attendances = Attendance::oldest()
->where([
'timesheet_id' => $timesheet
])
->whereHas('employee', function ($q) use ($branch_id) {
$q->where('branch_id', $branch_id);
})
->whereBetween('attendance_time', [$start, $end])
->where('employee_id', 3)
->get(['employee_id', 'attendance_time']);
$monthly = $attendances->groupBy(function ($item) {
return $item->attendance_time->toDateString();
});
我知道这很复杂,如果有人能帮我的话,我会非常感激。与其按日期分组(从上午12点到凌晨12点),不如按日期分组(从早上6点到早上6点)减去出勤时间(从早上6点到早上6点)。您可能需要将DB::raw(“”)与mysql DATE_格式和DATE_SUB或您选择的其他DB一起使用。