Laravel按条款分组

问题描述

我的处境很艰难,我一直在尝试通过查询生成器或雄辩的方法找到解决方案,但是好几天没有运气了。

我有一个带有以下字段的数据库表/雄辩模型“出勤”:

id,employee_id,timesheet_id,勤工时间“ datetime”

此表代表特定分支机构中每个员工的指纹日志。

timesheet_id:代表白天的员工轮班,我有两个:

  • 上午6点至下午3点
  • 第二天从下午3点到次日凌晨12点“导致问题”

现在我想制作一个月度报告,以获取特定时间段内该表中的所有数据,假设从01-09-2020到30-09-2020,这对于工作换班的员工非常容易,但是对于那些在第二班工作的人来说,这有点困难,因为当按日期对记录进行分组时(他们注销第二天更有可能的记录),如果有意义的话,将不会与该日期进行分组。

让我们以员工#3的记录为例(于26-09-2020):

enter image description here

请参阅每天的第一条记录是前一天的注销记录,第二条记录是当天的登录记录,这意味着如果该员工只有一条记录,我必须检查时间是否小于或等于到凌晨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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...