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

Laravel 5.1 Fetch Rows between start_time and end_time (two different fields)

我一直致力于预订项目,我收集请求(time_start 和 time_end)并为每个请求增加 1:30 小时,这样我就可以防止用户 select 冲突。

我已经尝试使用 "Between",但它似乎不起作用。

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

当我执行我的代码时,它 returns 为空。请帮忙。

您可以使用 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. 预订在给定时间范围内开始和结束。