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();
我有以下 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();