Laravelで特定のカラムの値を大きい順に取得する方法

Laravelで特定のカラムの値を大きい順に取得する方法

405 回閲覧されました

みなさんこんにちは、jonioです。

今回はLaravelで特定のカラムの数値型の値を大きい順・小さい順に取得する方法のメモになります。

データ型が数値じゃない場合のやり方も残しておきます。

前提

テーブルのデータ型は数値です。

私が並び順を変えようとしたカラムは下記の赤枠になります。

やり方

コントローラーでデータを取得しますが下記の記述をします。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Score;

class QuizController extends Controller
{
    public function index()
    {
        $tableScores = Score::orderBy('score', 'DESC')->get();

        return view('quiz.index',compact('tableScores'));
    }
}

大きい順に値を取得しているのは12行目です。

並び順を考えてデータを取得する時は下記の記述になります。

モデル名::orderBy('並び順を考えるカラム名', '大きい順(小さい順)')->get();

大きい順に並べたい時は「DESC」を使い小さい順に並べたい時は「ASC」を使います。

今回DESCを使っているので大きい順に並べています、画面に表示すると下記になります。

何個並べるかを制限する

今はテーブルのデータを大きい順に全て並べていますが並べる個数を制限することもできます。

その場合はデータを取得する為の記述を下記に変更します。

Score::orderBy('score', 'DESC')->take(並べる個数)->get();

例えば「並べる個数」を2にすると下記のように2件しか表示されません。

データ型が数値ではない場合

大きい・小さい順に並べるデータ型が数値型ではない場合は型の変換をしないといけません。

今回のメモのテーブルのscoreカラムのデータ型はintですがintではなかったとします。

int型に変換するには下記の記述をします。

Score::orderBy('CAST(score as int) DESC')->get();

上記の「score」はカラム名で「int」はデータ型です。

「DESC」は大きい順に並べる場合ですが小さい順に並べる場合は「ASC」を使います。

これでデータを大きい順・または小さい順にならべることができます。