检查laravel查询的重叠时隙

wgx48brx  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(306)

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

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();

提前谢谢!

z9zf31ra

z9zf31ra1#

首先,能够接触到 $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();

希望这对你有帮助!

ou6hu8tu

ou6hu8tu2#

稍加修改的查询,希望能适用于所有人搜索时隙预约算法。

$Availability=  Availability::
                    where(function ($query) use ($start_time, $end_time) { 
                        $query
                           ->whereBetween('start_time', [$start_time, $end_time])
                           ->orWhere(function ($query) use ($start_time, $end_time) {
                                    $query
                                        ->whereBetween('end_time', [$start_time, $end_time]);
                                });
                     })->count();

相关问题