Laravel 5:检查事件日期范围是否尚未占用

nx7onnlm  于 2023-06-25  发布在  其他
关注(0)|答案(5)|浏览(128)

我正在为几天的事件创建日历,事件不能重叠。但是事件可以在另一个事件开始/结束时开始/结束。
在Laravel中,在我的事件模型表中,我存储了事件的开始和结束日期。如何在存储新事件之前检查数据库,如果它有效(不与现有事件重叠,不包括保证金/边界日)?

提前非常感谢您的帮助。

nafvub8i

nafvub8i1#

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

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

vpfxa7rd2#

将其用于所有变量交叉点日期范围。对我有帮助

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

l7wslrjt3#

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

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

wd2eg0qa4#

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

mqkwyuun5#

我觉得可以缩短一点,就像:

$count = Model::where('end_time', '>=', $startTime)
    ->where('start_time', '<=', $endTime)
    ->count();

相关问题