前提・実現したいこと
Laravel-adminで、複数テーブルを使ったデータ管理システムを作成しています。
Grid画面において、リレーション先のカラムでsortable()を使ったソート機能を実現したいのですが、以下のエラーが出てしまいます。
発生している問題・エラーメッセージ
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'JSON_EXTRACT(customer, '$.name')' in 'order clause' (SQL: select * from `sales` order by `JSON_EXTRACT(customer, '$`.`name')` desc limit 20 offset 0)
該当のソースコード
Table
1customers 2 - id 3 - name 4 5sales 6 - id 7 - item 8 - customer_id
SaleController
1class SaleController extends AdminController 2{ 3 protected function grid() 4 { 5 $grid = new Grid(new Sale()); 6 $grid->column('id', __('ID'))->sortable(); 7 $grid->column('item', __('商品名'))->sortable(); 8 $grid->column('customer_id', __('顧客ID'))->sortable(); 9 $grid->column('customer.name', __('顧客名'))->sortable(); 10 return $grid; 11 } 12}
Sale
1namespace App\Models; 2use Illuminate\Database\Eloquent\Factories\HasFactory; 3use Illuminate\Database\Eloquent\Model; 4use App\Models\Customer; 5 6class Sale extends Model 7{ 8 use HasFactory; 9 public function customer() 10 { 11 return $this->belongsTo(Customer::class, 'customer_id'); 12 } 13}
Customer
1namespace App\Models; 2use Illuminate\Database\Eloquent\Factories\HasFactory; 3use Illuminate\Database\Eloquent\Model; 4use App\Models\Sale; 5 6class Customer extends Model 7{ 8 use HasFactory; 9 public function sales() 10 { 11 return $this->hasMany(Sale::class); 12 } 13}
試したこと
自テーブルのカラム (id, item, customer_id)では、ソート機能は正常に動作しています。
Laravel-adminのソースコードも見てみました。
/vendor/encore/laravel-admin/src/Grid/Model.php
に、
setRelationSort($column)
という関数も定義されているので、機能としては実装されています。
なので、私の使い方に問題があるのだろうと考えております。
補足情報
【開発環境】
Laravel-admin:v1.8.11
Laravel:v8.22.0 (PHP v7.4.2)
【参考サイト】
Laravel-admin公式ドキュメント (Model grid / Column Sorting)
上記ドキュメントを一通り見たのですが、リレーション先のカラムでのソートについての詳細な説明を見つけられませんでした。
GitHub (Relational sorting issue #2283)
私とは違う現象での不具合報告ですが、ここの質問文のソースを見る限り、私の実装方法と違いがないように見えます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。