タイトル: Laravelにおけるorder by句のキャスト
SEOタイトル: Laravelにおけるorder by句のキャスト
Laravelで文字列カラムを数値として並び替えたいときは、orderByRaw() でキャストを明示します。
たとえば 1, 2, 10 のような値を文字列のまま並び替えると 1, 10, 2 になってしまうため、数値順にしたい場合はキャストが必要です。
前提
文字列カラム colA を、並び替え時だけ数値として扱いたいケースを想定します。
キャスト例
$tweets = DB::table('test_table')
->orderByRaw('CAST(test_table.colA AS signed) DESC')
->get();
使い分けの考え方
- MySQL系なら
CAST(... AS signed)が分かりやすい - 小数を扱うなら整数型ではなく適切な型へキャストする
- 頻繁に使うなら、保存時点で数値型カラムにしておく方が安全
注意点
- DB製品によってキャスト構文が少し異なる
- 文字列に数値以外が混ざっていると、期待した順序にならないことがある
orderByRaw()は生SQLになるため、外部入力をそのまま埋め込まない