编写此查询的更好方法是将其转换为laravel eloquent

时间:2017-05-19 19:22:05

标签: php mysql laravel laravel-5 eloquent

我已准备好此查询但无法将其转换为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

1 个答案:

答案 0 :(得分:0)

Eloquent不是在Laravel中查询数据库的唯一方法。 Eloquent就是Laravel带来的ORM。 Eloquent本身建立在Laravel附带的QueryBuilder类上。

您当然可以使用查询构建器重建查询,但更有效的方法是使用现有查询,如下所示:DB::select($query)

如果您选择直接将查询放入DB::select()而不是使用QueryBuilder重建它,那么您将容易受到SQL注入攻击。在构建SQL查询之前,您需要处理这些问题。