#やりたいこ
- 五十音順に並び替えてコレクションを取得する
- name_kanaが NULL場合は、nameの五十音順でデータをけつにつける
#参考記事
SQLで検索する時、空白やNULLのデータを後ろに並べたい
https://qiita.com/AkihikoIkeda/items/0f926f023b06066dc759
#確認環境
- Laravel5.6
- PHP7.3
- MySQL 5.6.39
#コード
<?php
namespace App\Http\Controllers;
use App\User;
class UserController extends Controller
{
const PAGINATION_PER_PAGE = 50;
$users = User::orderBy(DB::raw(
"case when name_kana is NULL then '2'" . // 1. NULLの場合は2番目
" when name_kana = '' then '1'" . // 2. '' の場合は1番目
" else '0' end, " . // 3. 値が入っていたら0番目
"name_kana, " . // 4. ひらがな五十音順 *1
"name" // 5. 記号、数字、アルファベット、ひらがな(カナ)、漢字の順
))->paginate(self::PAGINATION_PER_PAGE);
}
#要点
// 一行で書くと…
$users = User::orderBy(DB::raw("case when name_kana is NULL then '2' when name_kana = '' then '1' else '0' end, name_kana, name"))->paginate(self::PAGINATION_PER_PAGE);
#やったこと
- コレクションを取得してsortBy('name_kana')とか… だめだった。
- *1の記述がないと、適当なならびにならなかった。