这是我的样本表:
reservation_date | time_start | TIME_END 7/10/2017 | 12:00:00 | 14:00:00
我要做的是根据用户的请求返回time_start和time_end之间的所有预留。和/从time_start和time_end加2小时以防止冲突。我试过了
$times_data = $this->getTimesData($request->reservation_time_start, $request->reservation_time_end);
$reservations = $reservations->whereBetween('reservation_time_start', $times_data)
protected function getTimesData($time_start, $time_end)
{
$time_from = $this->getTimeFrom($time_start);
$time_to = $this->getTimeTo($time_end);
return [$time_from, $time_to];
}
protected function getTimeFrom($time)
{
$time = Carbon::parse($time);
return $time->subHours(2)->toTimeString();
}
protected function getTimeTo($time)
{
$time = Carbon::parse($time);
return $time->addHours(2)->toTimeString();
}
但结果不是我的预期。我也试过了
->whereRaw("(reservation_time_start BETWEEN ? AND ?) AND (reservation_time_end BETWEEN ? AND ?) ",$times_data)
但它返回null。请帮忙。
答案 0 :(得分:0)
检查laravel文档https://laravel.com/docs/5.4/queries 我想你想做那样的事情:
{{1}}
答案 1 :(得分:0)
我找到了解决问题的方法:
我使用whereRaw,我发现当我使用双引号(在whereRaw参数内)时,它返回null。然后我把它改成单引号然后我的问题解决了。继承了我的疑问,
$reservations->whereRaw('((reservation_time_start >= ? AND reservation_time_start <= ?) OR (reservation_time_end <= ? AND reservation_time_end >= ?))',[$time_start, $time_end, $time_end, $time_start])
->whereIn('reservation_status_id', [1, 2, 3])
->ofReservationDate($request->reservation_date);