Laravel-adminのGrid表示でリレーション先のテーブルで並べ替えできない?!

プログラミング
この記事は約2分で読めます。
記事内に広告が含まれます。

前はできてた気がするけど、久しぶりに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) {
に修正した。

とりあえずソートができるようになりました。
時間ができたらちゃんとソースを読んでみようと思います。

コメント

タイトルとURLをコピーしました