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重叠。所以这是唯一需要的比较。