Laravel7 case whenでselect句に条件式を書く方法

例えば、お知らせテーブルの投稿日時が過去の場合は0を、未来の場合は1を’is_future’という別名をつけて抽出したい場合

SQL

SELECT
    i.id,
    i.post_datetime,
    CASE WHEN i.post_datetime < NOW() THEN 0 ELSE 1 END AS is_future
FROM
    informations i

Laravelクエリビルダ

$information = Information::select([
            'i.id',
            'i.post_datetime',
    ])
    ->selectRaw("CASE WHEN i.post_datetime < NOW() THEN 0 ELSE 1 END AS is_future")
    ->from('informations AS i')
    ->get();

ちなみに、開始時刻より現在時刻が未来でかつ、終了時刻より現在時刻が過去の場合という式は、ANDで繋げるとOK。’または’の場合は、ORで繋げるとOK。

$information = Information::select([
            'i.id',
            'i.start_datetime',
            'i.end_datetime',
    ])
    ->selectRaw("CASE WHEN i.start_datetime <= NOW() AND i.end_datetime > NOW() THEN 1 ELSE 0 END AS is_public")
    ->from('informations AS i')
    ->get();

また、20才以下は0、30才以下は1、40才以下は2、それ以外は3という場合は以下のようにすれば良い。

    ->selectRaw("
        CASE
            WHEN age < 20 THEN 0
            WHEN age < 30 THEN 1
            WHEN age < 40 THEN 2
            ELSE 3
        END AS age_group
    ")

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です