【市場価値がわかる】エンジニア転職におすすめなサイト

LaravelでorderByの昇順・降順が順番通りにいかない時の対処法

MENTAでエラー解決

LaravelのorderByを使って、数字を小さい順に並び替えたいんだけど、うまくいかないなぁ…

こんな疑問を解決します。

今回のゴールは以下です。

  • 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が数字順に並べ替えることができます。

現役エンジニアに相談するならMENTA(おすすめ)

スキルを売り買いするならココナラ

動画教材ならUdemy

コメント

コメントする

CAPTCHA


Contents
閉じる