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