【发布时间】:2017-12-29 07:27:53
【问题描述】:
我需要将此 MYSQL 查询移植到 Laravel 5.2 查询构建器,但我不知道如何成功实现 Logical NOT部分:
SET @in='2017-06-01', @out='2017-06-01';
SELECT
rooms.id,
rooms.name,
reservations.check_in,
reservations.check_out,
reservations.room_id
FROM
rooms
LEFT JOIN
reservations
ON rooms.id = reservations.room_id AND
NOT (
(reservations.check_in < @in AND reservations.check_out < @in)
OR
(reservations.check_in > @out AND reservations.check_out > @out)
)
WHERE reservations.room_id IS NULL
我正在尝试使用 Query Builder 的原始查询,但它不起作用,我收到 对未定义方法 Illuminate\Database\Query\Expression::whereNull() 的调用强>错误
$free_rooms = Room
::select('rooms.id', 'rooms.name')
->leftJoin('reservations', 'rooms.id', '=', 'reservations.room_id') AND
DB::raw("
NOT (
(reservations.check_in < $request->check_in AND reservations.check_out < $request->check_in)
OR
(reservations.check_in > $request->check_out AND reservations.check_out > $request->check_out)
)
")
->whereNull('reservations.room_id')
->get();
【问题讨论】:
-
如果您的查询对于查询构建器来说过于复杂,您始终可以使用hydrateRaw()。
Room::hydrateRaw($rawQuery, $bindings) -
我现在收到 SQLSTATE[HY093]: Invalid parameter number 错误,这里粘贴我的代码外观:pastebin.com/mQsjMVqV
标签: php laravel laravel-5.2 laravel-query-builder