PHP

【Laravel】DBから取得表示した一覧データを降順・昇順でソート(並び替え)する方法

LaravelでDBから取得表示した一覧ページのデータをリンククリックで降順(desc)・昇順(asc)でソート(並び替え)する方法をご紹介します。
※ページURLやControllerの記述は仮で設定してますので必要に応じて変更して下さい。

Laravelのバージョン

Laravelのバージョンは「Laravel Framework 6.18.39」で行いました。
Laravelのバージョンを確認するコマンドは以下の通りです。

php artisan -V

view(一覧ページ)の記述

※IDでソートさせたいのであればIDに以下の様にリンクを貼ります。

	<th><a href="./listpages?sort=id&order={{ $order }}">ID</th>
	<th>名前</th>
	<th>年齢</th>
	<th>性別</th>

Controller(一覧ページデータ取得)の記述

※$request(viewからのパラメーター)でsort(ソートさせたいカラム名)とorder(降順or昇順)を判別し、ソートデータを取得します。

    public function listdata(Request $request)
    {
        $sort = $request->sort;
        $order = $request->order;
	//パラメータが無い場合(デフォルト)はidの降順(desc)を設定
        if (is_null($sort) && is_null($order)) {
            $sort = 'id';
            $order = 'desc';
        }

        $orderpram = "desc";
	//設定されたデータの並びがdescの場合、viewのリンクパラメータ$orderに昇順(asc)を設定
        if($order=="desc"){
            $orderpram="asc";
        }

	//idのソートデータを20件取得
        $listpages = Listpage::orderBy($sort, $order)->paginate(20);

        return view('listpages', [
            'listpages' => $listpages,
            'order' => $orderpram,	//viewのリンクパラメータを設定
        ]);
    }

Routeの記述

※ページURLは必要に応じて変更して下さい。

Route::get('/listpages', 'ListpagesController@listdata');

 
※流用される場合は自己責任でお願いします。