Mysql 检查laravel查询的重叠时隙

Mysql 检查laravel查询的重叠时隙,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

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

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();
$startTime=$request->start\u time;
$endTime=$request->end\u time;
$Availability=Availability::where(函数($query)使用($startTime,$endTime){
$query
->其中(函数($query)使用($startTime,$endTime){
$query
->其中(‘开始时间’,“”,$startTime);
})
->orWhere(函数($query)使用($startTime,$endTime){
$query
->其中('start_time','=',$endTime);
});
})->计数();

希望这对你有帮助

首先,为了能够在查询闭包中访问
$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();
$startTime=$request->start\u time;
$endTime=$request->end\u time;
$Availability=Availability::where(函数($query)使用($startTime,$endTime){
$query
->其中(函数($query)使用($startTime,$endTime){
$query
->其中(‘开始时间’,“”,$startTime);
})
->orWhere(函数($query)使用($startTime,$endTime){
$query
->其中('start_time','=',$endTime);
});
})->计数();

希望这对你有帮助

小修改查询希望它能适用于所有搜索时段预订算法的人

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

小修改查询希望它能适用于所有搜索时段预订算法的人

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

您可以像这样尝试:
$Availability=Availability::where(函数($query)use($request){$query->where('start_time',''$request->start_time);})->count()它不工作!尝试:
$startTime=$request->start\u time$endTime=$request->end\u time$可用性=可用性::where(函数($query)use($startTime,$endTime){$query->where(函数($query)use($startTime,$endTime){$query){$query->where('start_-time','>=',$startTime)->where('end_-time','=','endTime',$endTime);});})->count谢谢,只有下面的行需要修改,并且工作正常:$query->where('start_-time','>=',$startTime)->where('end_-time',''.$startTime);)很高兴我能帮助你!我已经发布了我的答案,请接受并投票您可以像这样尝试:
$Availability=Availability::where(函数($query)use($request){$query->where('start_time',''$request->start_time);})->count()它不工作!尝试:
$startTime=$request->start\u time$endTime=$request->end\u time$可用性=可用性::where(函数($query)use($startTime,$endTime){$query->where(函数($query)use($startTime,$endTime){$query){$query->where('start_-time','>=',$startTime)->where('end_-time','=','endTime',$endTime);});})->count谢谢,只有下面的行需要修改,并且工作正常:$query->where('start_-time','>=',$startTime)->where('end_-time',''.$startTime);)很高兴我能帮助你!我已经发布了我的答案,请接受并投票如果事件A在事件B结束之前开始,而在事件B开始之后结束,则事件A与事件B重叠。所以这是唯一需要的比较。如果事件A在事件B结束之前开始,并且在事件B开始之后结束,那么事件A与事件B重叠。所以这是唯一需要的比较。