Laravel 5.1获取start_time和end_time之间的行(两个不同的字段)

时间:2017-07-18 04:15:20

标签: php mysql laravel eloquent laravel-5.1

我一直在处理预订项目,我收集请求(time_start和time_end)并每次增加1:30小时,以防止用户选择冲突。

我尝试过使用“之间”但它似乎没有用。

->whereBetween('reservation_time_start', [$time_from, $time_to])
->whereBetween('reservation_time_end', [$time_from, $time_to])

我也尝试了这个,

->whereRaw('((reservation_time_end <= ? AND reservation_time_end >= ?) OR (reservation_time_start >= ? AND reservation_time_start <= ?))',[$time_end, $time_start,$time_start, $time_end])

它可以工作,但在某些情况下,如某些时间范围之间,我得不到任何结果。喜欢这个。

+----+------------------------+----------------------+
| id | reservation_time_start | reservation_time_end |
+----+------------------------+----------------------+
|  1 | 10:00:00               | 13:00:00             | <- i need to get this
|  2 | 12:00:00               | 14:00:00             |
|  3 | 14:00:00               | 15:00:00             |
+----+------------------------+----------------------+

示例用户输入:

$reservation_time_start = 12:00:00 (-1:30 Hour)
$reservation_time_end = 14:00:00 (+ 1:30 hour)

当我执行我的代码时,它返回null。请帮忙。

1 个答案:

答案 0 :(得分:2)

您可以使用Carbon解决问题,

您的用户输入时间为:

$reservation_time_start = 12:00:00;
$reservation_time_end = 14:00:00;

我建议您使用日期和时间,因此您的用户输入应为

$reservation_time_start = 2017-07-18 12:00:00;
$reservation_time_end = 2017-07-18 14:00:00;

现在,用Carbon解析这些时间。之后,分别从结束时间和开始时间的1:30开始添加和减去。

$start_time = Carbon::parse($reservation_time_start)->subMinutes(90);
$end_time = Carbon::parse($reservation_time_end)->addMinutes(90);

之后,您可以使用这样的简单查询,

DB::table('reservation')->where(function($query)  
     use($start_time,$end_time){      

         $query->where('reservation_time_start','>',$start_time)
               ->where('reservation_time_start','<',$end_time);
     })
    ->orWhere(function($query) use($start_time,$end_time){   

         $query->where('reservation_time_end','>',$start_time)
               ->where('reservation_time_end','<',$end_time);
    })
    ->get();

从上面的查询中,您将在给定的时间范围内获得预订。

希望你明白。

<强>更新

在您的情况下,您必须在预订中考虑以下案例。

  1. 预约从指定的时间段开始。
  2. 预约在给定的时间范围内结束。
  3. 在给定的时间范围内预约开始和结束。