【问题标题】:How to use order by in Laravel when it uses CASE WHEN?使用 CASE WHEN 时如何在 Laravel 中使用 order by?
【发布时间】:2017-02-17 20:32:03
【问题描述】:

我可以像这样在 Laravel 中使用orderBy 方法:

$posts = Post::orderBy('id', 'DESC')->get();

好的,当ORDER BY 子句中有CASE 时呢?像这样:

ORDER BY 
CASE
   WHEN id.PinRequestCount <> 0 THEN 5
   WHEN id.HighCallAlertCount <> 0 THEN 4
   WHEN id.HighAlertCount <> 0 THEN 3
   WHEN id.MediumCallAlertCount <> 0 THEN 2
   WHEN id.MediumAlertCount <> 0 THEN 1
END desc,

如何在 Laravel 中编写这个 ^?

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    试试这个:

    ->orderByRaw(
         "CASE WHEN <CONDITION> THEN < > ELSE < > END DESC"
    )
    

    【讨论】:

    • 谢谢 .. upvote .. 仅供参考,当我们使用Raw 时,是否会根据数据库匹配查询?如您所知,当您使用Post::orderBy('id', 'DESC')时,它适用于所有数据库(只需您需要更改配置中的数据库),现在我想知道,它是否仍然适用于所有数据库我们使用orderByRaw() ?
    • 没问题。我不确定,但我认为它适用于所有 RDBMS。 @stack
    【解决方案2】:

    你要使用raw,sagi 也提到过。

    $posts = Post::select(DB::raw
    ('CASE
       WHEN id.PinRequestCount <> 0 THEN 5
       WHEN id.HighCallAlertCount <> 0 THEN 4
       WHEN id.HighAlertCount <> 0 THEN 3
       WHEN id.MediumCallAlertCount <> 0 THEN 2
       WHEN id.MediumAlertCount <> 0 THEN 1
    END desc')
    )->orderBy('id', 'DESC')->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多