mysql - 检查 Laravel 查询的重叠时间段

标签 mysql laravel

在预订时间段时,我想检查该时间段是否与任何其他已预订的时间段重叠。使用以下查询进行相同但不正确的查询:

Availability::where('date',date('Y-m-d',strtotime($request->available_date)))
             ->where(function ($query) use($request){
                  $query->whereBetween('start_time', [date("H:i:s", strtotime($request->start_time)), date("H:i:s", strtotime($request->end_time))])
                        ->orWhereBetween('end_time', [date("H:i:s", strtotime($request->start_time)), date("H:i:s", strtotime($request->end_time))]);
              })
              ->get();

提前致谢!

最佳答案

首先,能够访问$startTime$endTime在查询闭包中,您需要使用 use 传递它们构造即

function ($query) use ($startTime, $endTime)

尝试如下:

$startTime = $request->start_time; 
$endTime = $request->end_time; 

$Availability = Availability::where(function ($query) use ($startTime, $endTime) { 
    $query
    ->where(function ($query) use ($startTime, $endTime) {
        $query
            ->where('start_time', '<=', $startTime)
            ->where('end_time', '>', $startTime);
    })
    ->orWhere(function ($query) use ($startTime, $endTime) {
        $query
            ->where('start_time', '<', $endTime)
            ->where('end_time', '>=', $endTime);
    });
})->count();

希望这对您有帮助!

关于mysql - 检查 Laravel 查询的重叠时间段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48071616/

相关文章:

php - 将sql查询结果添加到电子邮件模板

php - 如何防止 PHP 中的 SQL 注入(inject)?

mysql - 联合分页和两个子查询

未创建 laravel services.json

php - Laravel token 不匹配异常

php - 服务的动态表单输入

php - 无法使用laravel检索GET参数

php - 不正确的 SQL 语句

php - 如何使用 foreach 循环并在固定位置设置小的变化?

php - Laravel Schema Builder 时间戳 *with* timezone