我已准备好此查询但无法将其转换为laravel eloquent。我需要帮助来确定是否有更好的方法来按顺序编写此查询。
以下是查询
https://gist.github.com/thedesignerkumar/ef9062efb262ec9c128f4832af32d3e2
SELECT
rooms.location,
rooms.id,
rooms.`name`,
users.name,
IF(
(
bookings.`status` = 'booked' AND(
NOT(
bookings.end_time <= '2017-05-30 12:00:00' OR bookings.start_time >= '2017-05-30 12:35:00'
) OR(
bookings.recurring = 1 AND DATE(bookings.start_time) <= '2017-05-30' AND NOT(
TIME(bookings.end_time) <= '12:00:00' OR TIME(bookings.start_time) >= '12:35:00'
)
)
)
),
'Booked',
'Available'
) AS 'Status',
bookings.recurring,
bookings.start_time,
bookings.end_time
FROM
rooms
LEFT JOIN
bookings
ON
rooms.id = bookings.room_id
LEFT JOIN
users
ON
bookings.user_id = users.id
ORDER BY
STATUS
DESC
,
bookings.start_time ASC,
rooms.id ASC
答案 0 :(得分:0)
Eloquent不是在Laravel中查询数据库的唯一方法。 Eloquent就是Laravel带来的ORM。 Eloquent本身建立在Laravel附带的QueryBuilder类上。
您当然可以使用查询构建器重建查询,但更有效的方法是使用现有查询,如下所示:DB::select($query)
。
如果您选择直接将查询放入DB::select()
而不是使用QueryBuilder重建它,那么您将容易受到SQL注入攻击。在构建SQL查询之前,您需要处理这些问题。