Laravel Guru - 如何在 Laravel 中执行复杂的 SQL case 语句

Laravel Guru - How to execute a complicated SQL case statement in Laravel

我有以下 SQL 查询。

SELECT 
CASE
WHEN start_time > end_time AND (CURTIME() > start_time OR CURTIME() < end_time) THEN 'open'
    WHEN start_time < end_time AND (CURTIME() > start_time AND CURTIME() < end_time) THEN 'open'
    ELSE 'closed'
END AS now
FROM user_time;

我必须在 Laravel 控制器上执行它。这是我尝试过的。

$sqlquery = "SELECT CASE
              WHEN start_time > end_time AND (CURTIME() > start_time OR CURTIME() < end_time) THEN 'open'
              WHEN start_time < end_time AND (CURTIME() > start_time AND CURTIME() < end_time) THEN 'open'
              ELSE 'closed'
             END AS NOW_open/closed
            FROM users JOIN user_time;";

$getRestaurant = User::select('users.*','user_time.*', DB::raw($sqlquery));

没用。首先,'<'和'>'都变成了>和<。 我该如何解决这个问题?

你好朋友,你可以在 select 中使用 DB::raw,如下所示,假设 'start_time' 和 'end_time' 来自 user_timetable

User::join('user_time', 'user_time.user_id', '=', users.id)
     ->select(DB::raw('(CASE
         WHEN user_time.start_time > user_time.end_time AND (CURTIME() > user_time.start_time AND CURTIME() < user_time.end_time+24) THEN 'open'
         WHEN user_time.start_time < user_time.end_time AND (CURTIME() < user_time.start_time AND CURTIME() > user_time.end_time) THEN 'open'
         ELSE 'closed'
         END) AS now_open'))->get();