问题描述
我的处境很艰难,我一直在尝试通过查询生成器或雄辩的方法找到解决方案,但是好几天没有运气了。
id,employee_id,timesheet_id,勤工时间“ datetime”
此表代表特定分支机构中每个员工的指纹日志。
timesheet_id:代表白天的员工轮班,我有两个:
- 上午6点至下午3点
- 第二天从下午3点到次日凌晨12点“导致问题”
现在我想制作一个月度报告,以获取特定时间段内该表中的所有数据,假设从01-09-2020到30-09-2020,这对于工作换班的员工非常容易,但是对于那些在第二班工作的人来说,这有点困难,因为当按日期对记录进行分组时(他们注销第二天更有可能的记录),如果有意义的话,将不会与该日期进行分组。
让我们以员工#3的记录为例(于26-09-2020):
请参阅每天的第一条记录是前一天的注销记录,第二条记录是当天的登录记录,这意味着如果该员工只有一条记录,我必须检查时间是否小于或等于到凌晨6点,这表示它是前一天的注销记录,否则就是这一天的登录记录。
我尝试的工作是获取从01-09-2020 00:00:00到01-10-2020 06:00:00的所有记录,这样我可以注销30-09的登出信息,然后按勤工时间分组,但是如何按日期分组时,我该检查员工在第二天有注销记录吗?
$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();
});
我知道这很复杂,如果有人能帮助我,我将非常感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)