自定义验证规则,检查日期范围是不是已经被占用

Posted

技术标签:

【中文标题】自定义验证规则,检查日期范围是不是已经被占用【英文标题】:Custom validation rule , check if date range is already taken or not自定义验证规则,检查日期范围是否已经被占用 【发布时间】:2022-01-05 03:22:08 【问题描述】:

我必须管理房屋租赁的预订,当我进行新预订时,开始日期和结束日期应该是免费的。

例如,如果我在 9 月 23 日至 9 月 28 日期间为客户预订,我无法在此日期内创建另一个预订。 我需要一个雄辩的查询来检查started_at 和ends_at(表单的)是否不包括在现有日期之间

【问题讨论】:

这能回答你的问题吗? How to query between two dates using Laravel and Eloquent? 我尝试了几个查询,但例如,如果我从 12 月 5 日到 12 月 8 日预订,然后我在 12 月 3 日到 12 月 10 日进行了新的预订,它不会出错。但从 12 月 6 日到 12 月 7 日,它出现了错误。我不知道如何提出这个请求 【参考方案1】:

我想我找到了解决办法:

$bookings = DB::table('bookings')
    ->where(function ($q) use ($start, $end) 
        $q->where('started_at', '>=', $start)
            ->where('started_at', '<=', $end);
    )
    ->orWhere(function ($q) use ($start, $end) 
        $q->where('ends_at', '>=', $start)
            ->where('ends_at', '<=', $end);
    )
    ->orWhere(function ($q) use ($start, $end) 
        $q->where('started_at', '<', $start)
            ->where('ends_at', '>', $end);
    )
    ->count();

【讨论】:

以上是关于自定义验证规则,检查日期范围是不是已经被占用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 验证器和使用 AJAX 的自定义规则

Angular2 Material:Angular 材质输入的自定义验证

14_自定义验证表单字段

使用列名和过滤器检查存在的自定义验证规则

Laravel 5.5 / 验证器 / 自定义规则

最小最大价格范围验证不适用于 jquery.validate.js