Laravel,MongoDB:在查询中包含具有“触摸”开始/结束时间的事件

问题描述

在查询之前,我将简要介绍应用程序配置。我正在通过Jenssegers MongoDB插件使用MongoDB运行Laravel 6应用程序。到目前为止,我不必编写原始的mongo查询,我希望我也不必编写原始查询,我的意思是,我什至不知道如何通过Eloquent甚至是SQL来实现我想要的功能,所以不确定是否可能

我有三种型号:

用户-标准用户详细信息

可用性-具有开始日期,结束日期,持续时间,用户ID和其他不相关属性的事件类型模型

Shift -具有开始日期,结束日期,持续时间和其他不相关属性的事件类型模型

用户可以具有许多可用性

我现在需要做的是给定的 Shift ,找到可以在该时间(从Shift的start_date到end_date)工作的用户。现在,这很简单,我可以这样做:

User::whereHas('availability',function($query) use ($shift_start,$shift_end) {
    $query->where('start_date','<=',$shift_start)->where('end_date','>=',$shift_end);
})->get();

所有这些都可以正常工作,但是用户也希望能够这样创建可用性:

可用性1: 2020年9月21日14:00-2020年9月21日23:59

可用性2: 2020年9月22日00:00-2020年9月22日06:00

这意味着这两个事件即使是两个事件,也被“链接”在一起。从技术上说,该用户将在2020年9月21日14:00-2020年9月22日06:00可用,因此,如果班次的日期是开始:2020年9月21日18:00结束:2020年9月22日04:00,则应将用户返回为转变。 我没有找到一种方法来将这种边缘情况包括在查询中,而这正是我需要的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)