PHP
laravel
column-sortable

laravelのcolumn-sortableでマルチカラムソートする

やりたいこと

前提

laravelのページネーションにソート機能を追加する

やった

こんな感じでオリジナルのソートメソッド作れるからそれでやる。

Model

カスタムソートメソッドを追加

Reservation.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Kyslik\ColumnSortable\Sortable;

class Reservation extends Model
{
    use Sortable;

    public $sortable = ['id', 'reserve_date', 'time_from'];

    /**
     * 日付と時刻でorderByするメソッドを追加
     * xxxSortableの形にする
     */
    public function reserveDateTimeSortable($query, $direction)
    {
        // ORDER BY reserve_date ASC/DESC, time_from ASC/DESC
        return $query->orderBy('reserve_date', $direction)->orderBy('time_from', $direction);

        // 日付だけ昇順/降順切り替えで時間は常に昇順にする場合
        // ORDER BY reserve_date ASC/DESC, time_from ASC
        // return $query->orderBy('reserve_date', $direction)->orderBy('time_from', 'asc');
    }
}

View

引数のカラム名を作ったメソッド名にする

reservation/index.php
<th>@sortablelink('reserveDateTime', '予約日時')</th>

備考

<th>@sortablelink('reserve_date, time_from', '予約日時')</th> とかでいけんじゃね?

ダメでした。
今のところ基本機能ではマルチカラムソート対応してなさそう。
ソートのカスタマイズが簡単だからそこまで問題でもないかな。