前はできてた気がするけど、久しぶりにlaravel-adminで管理画面を作ったらリレーション先の項目で並べ替えでエラーが表示された。
エラーの内容を見るとjsonテーブル内での並べ替えを実行しているようだ。
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
$grid = new Grid(new Contact());
$grid->model()->orderBy('created_at', 'desc');
$grid->column('id', __('Id'))->sortable();
$grid->column('user.name', __('名前'))->sortable(); // ←userテーブルのリレーション先のname項目でソート
$grid->column('created_at', __('作成日))->sortable();
return $grid;
}
とりあえず、急ぎで動かしたかったので、laravel-admin自体に修正を入れました。
vendor/encore/laravel-admin/src/Grid/Model.php
if ($columnNameContainsDots === true && $isRelation) {
$this->setRelationSort($columnName);
} else {
$this->resetOrderBy();
Model.phpの530行目付近にある
if ($columnNameContainsDots === true && $isRelation) {
を
if ($columnNameContainsDots === true) {
に修正した。
とりあえずソートができるようになりました。
時間ができたらちゃんとソースを読んでみようと思います。
コメント