Laravel 5.1在time_start和time_end之间回归

时间:2017-07-10 08:35:27

标签: php mysql eloquent laravel-5.1

这是我的样本表:

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。请帮忙。

2 个答案:

答案 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);