LaravelのorderByを使って、数字を小さい順に並び替えたいんだけど、うまくいかないなぁ…
こんな疑問を解決します。
ココナラと似てるサイト比較11選!【2023年最新版】
この記事ではココナラに似てる副業サイトを11こ紹介しています。 今すぐスキルをお金にするなら、記事で気になったサービスに登録してみましょう。 本記事のゴール ココ…
転職におすすめなサイト11選【リモート・フリーランスも対象】
転職におすすめなサイトが知りたいなぁ… 転職エージェントによって相性があります! この記事では、フリーランスの方でも利用できる転職におすすめなサイトを紹介しま…
休日で空いた時間の暇つぶしを探せるアプリを公開しています。
今回のゴールは以下です。
- orderByを使って並び替えたいのに、桁数が異なる数字で並び替えたらうまくいかない
これを以下のように、数字が小さい順に並び替えるようにします。
結論、DBのカラムの型が数字型(intやbigIntなど)になっているか、もし文字列型(charやvarchar)になっている場合はCASTを使いましょう。
データを並び替えるときに以下のようにorderByを使ってかけます。
$books = Book::orderBy('book_code', 'asc')->get();
もし、book_codeのカラムの型が数字型の場合は、綺麗に昇順・降順ができます。
しかし、book_codeのカラムの型が文字列型の場合、以下のように数字順になってくれません。
なので、CASTを使い、文字列を数字型に変換してorderByする必要があります。
CASTはSQLの知識になります。
CAST()で値を特定の型に変換できるよ!ってやつです。
CASTを使って文字列型を数字型に変換すると、以下のように書けます。
// 昇順(1,2,3,...)
$books = Book::orderByRaw('CAST(book_code as SIGNED) ASC')->get();
// 降順(9,8,7,...)
$books = Book::orderByRaw('CAST(book_code as SIGNED) DESC')->get();
orderByRawは、生のSQLを実行させたい場合に用います。
orderBy(‘CAST()’)とはLaravelの都合上、書けません。
文字列を数値型に変換したことで、orderByが数字順に並べ替えることができます。
リンク
ココナラと似てるサイト比較11選!【2023年最新版】
この記事ではココナラに似てる副業サイトを11こ紹介しています。 今すぐスキルをお金にするなら、記事で気になったサービスに登録してみましょう。 本記事のゴール ココ…
転職におすすめなサイト11選【リモート・フリーランスも対象】
転職におすすめなサイトが知りたいなぁ… 転職エージェントによって相性があります! この記事では、フリーランスの方でも利用できる転職におすすめなサイトを紹介しま…
休日で空いた時間の暇つぶしを探せるアプリを公開しています。
コメント