【问题标题】:laravel query builder does not allow to do BETWEEN queries like mysqllaravel 查询生成器不允许像 mysql 那样做 BETWEEN 查询
【发布时间】:2015-11-18 15:47:26
【问题描述】:

我想使用当前时间与 db 数据检查时间重叠。我这样做是为了检查班次时间重叠,这里是我的数据库表示例

1 )date:1 shift:1 start_time 04:00 end_time 05:00
2)date:1  shift: 2  start_time 09:00 end_time 11:00

特定的一天有几个班次,当有人编辑或添加班次时,我想检查一天的班次是否重叠

这是我的代码

$shiftData = Shifts::where('time_sheet_id', '=', $timesheet_id->id)
                        ->where('user_id', '=', $driver_id->id)
                        ->where('role_id', '=', 1)
                        ->whereBetween('shift_start_time', array($shift_start , $shift_end))
                        ->whereBetween('shift_end_time' , array($shift_start , $shift_end))
                        ->count();

$shift_start 和 $shift_end 是用户输入值。使用此代码,我正在检查计数是否为 0 时间不重叠。

所以我尝试添加时间 $shift_start :4:20 和 $shift_end 4:40,但是通过此查询,它的返回不重叠。但它应该重叠表当前有时间转移到 4 到 5 (start_time 04:00 end_time 05:00)

请告诉我如何在上述情况下进行此查询

【问题讨论】:

  • 能否复制使用你的完整sql,可以在触发count()前使用toSql的方法;
  • @Svetlio:你的意思是我试过的 MySQL 查询?
  • 是的,只是想看看生成了什么以及你希望它如何......
  • 您的数据库中的shift_start_timeshift_end_time 列是什么数据类型?他们是 varchar2 吗?
  • 你的数据库中shift_start_time是什么类型,$shift_start的格式是什么?

标签: php mysql laravel query-builder


【解决方案1】:

如您所见,whereBetween() 方法不支持检查一个值是否在数据库中的字段之间,它只检查数据库中的一个字段是否在两个值之间。

因此,最简单的选择就是重写 where 子句以手动使用 >=<= 运算符。

尝试类似:

$shiftData = Shifts::where('time_sheet_id', '=', $timesheet_id->id)
    ->where('user_id', '=', $driver_id->id)
    ->where('role_id', '=', 1)
    ->where(function($q1) use ($shift_start, $shift_end) {
        $q1
            ->where(function($q2) use ($shift_start) {
                $q2
                    ->where('shift_start_time', '<=', $shift_start)
                    ->where('shift_end_time', '>=', $shift_start);
            })
            ->orWhere(function($q2) use ($shift_end) {
                $q2
                    ->where('shift_start_time', '<=', $shift_end)
                    ->where('shift_end_time', '>=', $shift_end);
            });
    })
    ->count();

【讨论】:

    猜你喜欢
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多