Edited at

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> とかでいけんじゃね?

ダメでした。

今のところ基本機能ではマルチカラムソート対応してなさそう。

ソートのカスタマイズが簡単だからそこまで問題でもないかな。