Php Laravel 5:检查事件日期范围是否尚未确定

Php Laravel 5:检查事件日期范围是否尚未确定,php,laravel,date,laravel-5,laravel-5.2,Php,Laravel,Date,Laravel 5,Laravel 5.2,我正在为几天的活动创建日历,这些活动不能重叠。但事件可以在另一个事件开始/结束时开始/结束 在Laravel中,我在我的事件模型表中存储事件的开始和结束日期。 如果新事件do数据库有效(不与现有事件重叠,不包括保证金/边界日),我如何在存储新事件do数据库之前进行检查 事先非常感谢您的帮助。这只是一些伪代码,因为您没有提供任何代码或模型,但根据表的设置方式,您应该可以这样做。这将返回新事件的开始时间或结束时间介于现有事件的开始时间和结束时间之间的任何事件。如果您的时间是时间戳或DateTime

我正在为几天的活动创建日历,这些活动不能重叠。但事件可以在另一个事件开始/结束时开始/结束

在Laravel中,我在我的事件模型表中存储事件的开始和结束日期。 如果新事件do数据库有效(不与现有事件重叠,不包括保证金/边界日),我如何在存储新事件do数据库之前进行检查


事先非常感谢您的帮助。

这只是一些伪代码,因为您没有提供任何代码或模型,但根据表的设置方式,您应该可以这样做。这将返回新事件的开始时间或结束时间介于现有事件的开始时间和结束时间之间的任何事件。如果您的时间是时间戳或DateTime列,这将起作用

 Events::where(DB::raw("? between start_time and end_time",$start))
      ->orWhere(DB::raw("? between start_time and end_time",$end))
      ->get();

您可以使用以下代码获取特定时间之间预订的事件的正确计数:

$eventsCount = Events::where(function ($query) use ($startTime, $endTime) {
 $query->where(function ($query) use ($startTime, $endTime) {
    $query->where('start', '>=', $startTime)
            ->where('end', '<', $startTime);
    })
    ->orWhere(function ($query) use ($startTime, $endTime) {
        $query->where('start', '<', $endTime)
                ->where('end', '>=', $endTime);
    });
})->count();
$eventscont=Events::where(函数($query)使用($startTime,$endTime){
$query->where(函数($query)use($startTime,$endTime){
$query->where('start','>=',$startTime)
->其中('end','=',$endTime);
});
})->计数();

将其用于所有日期范围。这对我有帮助

$rangeCount = TransferSchedule::where(function ($query) use ($from, $to) {
                $query->where(function ($query) use ($from, $to) {
                    $query->where('date_from', '<=', $from)
                        ->where('date_to', '>=', $from);
                })->orWhere(function ($query) use ($from, $to) {
                    $query->where('date_from', '<=', $to)
                        ->where('date_to', '>=', $to);
                })->orWhere(function ($query) use ($from, $to) {
                    $query->where('date_from', '>=', $from)
                        ->where('date_to', '<=', $to);
                });
            })->count();
$rangeCount=TransferSchedule::where(函数($query)使用($from,$to){
$query->where(函数($query)使用($from,$to){
$query->where('date_from','=',$from);
})->orWhere(函数($query)使用($from,$to){
$query->where('date_from','=',$to);
})->orWhere(函数($query)使用($from,$to){
$query->where('date\u from','>=',$from)
->其中('date_to','
->其中(函数($query)使用($startDate,$endDate,$currentDate){
$query->where('start_date','=',$endDate)
->其中('end_date','>',$currentDate);
})
->或where(函数($query)使用($startDate、$endDate、$currentDate){
$query->where('start\u date','>=',$startDate)
->其中(“结束日期”,“当前日期”);
})
->或where(函数($query)使用($startDate、$endDate、$currentDate){
$query->where('start_date','=',$startDate)
->其中('end_date','>',$currentDate);
})
->或where(函数($query)使用($startDate、$endDate、$currentDate){
$query->where('start_date','=',$endDate)
->其中('end_date','>',$currentDate);

这只是提醒大家注意一下。如果您知道您的偶数始终在某个日期范围内,则此方法会起作用。但如果它在该范围之前开始,然后在该范围之后结束,则将失败。感谢兄弟,此解决方案帮助我管理包含事件的日历。它允许我显示尚未完成的事件。
->where(function ($query) use($startDate, $endDate, $currentDate) {
                        $query->where('start_date', '<=', $startDate)
                            ->where('end_date', '>=', $endDate)
                            ->where('end_date', '>', $currentDate);
                    })
                    ->orWhere(function ($query) use($startDate, $endDate, $currentDate) {
                        $query->where('start_date', '>=', $startDate)
                            ->where('end_date', '<=', $endDate)
                            ->where('end_date', '>', $currentDate);
                    })
                    ->orWhere(function ($query) use($startDate, $endDate, $currentDate) {
                        $query->where('start_date', '<=', $startDate)
                            ->where('end_date', '>=', $startDate)
                            ->where('end_date', '>', $currentDate);
                    })
                    ->orWhere(function ($query) use($startDate, $endDate, $currentDate) {
                        $query->where('start_date', '<=', $endDate)
                            ->where('end_date', '>=', $endDate)
                            ->where('end_date', '>', $currentDate);