ハマログ

株式会社イーツー・インフォの社員ブログ

Laravel EloquentのソートでNULLを最後に持ってくる(MySQL)

Laravel5系+MySQL5のはなし。

Laravel+Eloquentのプロジェクトでデータベースから値を取得する際に、NULLを含む列でソート(orderBy)すると、NULLの行が先頭に取得されます。

NULLを後ろに表示したい、という要件をEloquentで実現する方法を調べました。
SQLで解決する
SQLで実現する場合、以下のように書くことができます。
->orderByRaw('列名 IS NULL ASC')
->orderBy('列名')
です。
※ちなみに、MySQL4系(もうないと思うけど)では利用できません。
ヘルパー関数で解決する
CollectionクラスのsortByメソッドに、コールバック関数を指定して実現します。
https://laravel.com/docs/5.4/collections#method-sortby

※コードは割愛
まとめ
できるよって書いたけど、パフォーマンスへの影響は状況しだいなので、explainしたり、そもそもNULLいれない設計にするとか、考慮が必要になるかもしれません。

また、CASEで実現するとかIF書くとか、他にも実現方法があると思いますので、ケースバイケースだと思います。

以上
EloquentLaravelLaravel5NULLPHPSortソート

  kaneko tomo   2017年7月8日


関連記事

Google AnalyticsのカスタムキャンペーンURLの利用

こんにちは、かねこです。 イーツー・インフォでは、システム運用・保守サポートの一…

先日使えるようになったGitHub CopilotのChatとfor CLIが便利だった

今年、2023年2月にGitHub Copilot for Businessが正…

iOSアプリケーションの審査通過後の公開時期

こんにちは、かねこです。 花粉の季節、いかがお過ごしでしょうか。 はじめに 会社…


← 前の投稿

次の投稿 →