【问题标题】:Validate Date in Laravel在 Laravel 中验证日期
【发布时间】:2021-03-17 03:25:27
【问题描述】:

我有这张预订表

开始日期 |结束日期

2020-12-15   2020-12-18
2020-12-19   2020-12-22

在此表中,预订数据正在保存,但我想在保存数据之前验证日期,如果开始日期和结束日期在数据库日期之间,则不应保存该记录。

我正在使用这个查询:

$start_date = date('Y-m-d H:i:s', strtotime($request->start_date));
$end_date=date("Y-m-d H:i:s",strtotime('+17 hours', strtotime($request->start_date)));

    $bookingData =Booking::whereBetween('start_date', [
        $start_date, $end_date
    ])->whereBetween('end_date', [
        $start_date, $end_date
    ])->exists();

非常感谢任何帮助。

【问题讨论】:

标签: laravel laravel-5 laravel-4


【解决方案1】:
$exists = Booking::whereBetween('start_date', [
    $request->start_date, $request->end
])->whereBetween('end_date', [
    $request->start_date, $request->end
])->exists();

【讨论】:

  • 谢谢,但我想将其与数据库值匹配,用户输入的 start_date 和 end_date 不应已存在于数据库中
  • 所以您先将行保存到数据库中,然后出于某种原因进行验证?
  • 是的,用户已经预订,如果有用户想要预订,如果它在已经预订的范围之间,那么用户不能预订
  • 对不起,我现在明白了,那么您可以简单地使用whereBetween 和您的日期和->exists() 来检查是否存在。
  • 我是否也应该通过请求传递字段名称?我的数据库中有两个字段,即 start_date 和 end_date
【解决方案2】:

如果在给定的日期范围内已经预订了任何预定,您可以使用以下代码进行检查

DB::select("SELECT * FROM booking ". " WHERE (('$request->start_date'  BETWEEN start_date AND end_date)". " OR ('$request->end_date' BETWEEN start_date AND end_date)". " OR (start_date BETWEEN '$request->start_date' AND '$request->end_date'))");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2018-10-29
    • 2018-08-04
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多