Laravel Admin 跨库关联表字段排序报错解决方案
这个问题可能是由于 Laravel Admin 在进行跨库关联表字段排序时无法正确识别表名和字段名导致的。您可以尝试以下几个解决方法:
- 使用完整的表名和字段名
在排序字段中使用完整的表名和字段名来确保 Laravel Admin 能够正确识别它们。例如:
protected $sortable = [
'table1.field1' => 'Field 1',
'table2.field2' => 'Field 2',
];
- 使用别名
在跨库关联表时,您可以使用别名来简化表名和字段名。例如:
DB::table('table1')
->join('database2.table2 as t2', 'table1.id', '=', 't2.table1_id')
->orderBy('t2.field1')
->get();
在 Laravel Admin 中,您可以在模型中定义别名:
protected $alias = [
'table2' => 'database2.table2',
];
然后在排序字段中使用别名:
protected $sortable = [
'table1.field1' => 'Field 1',
'table2.field2' => 'Field 2',
];
- 修改配置
在 Laravel Admin 的配置文件中,您可以设置 database.connections 配置项来添加跨库关联表的数据库连接。例如:
'connections' => [
'database1' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'database1'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
'database2' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE2', 'database2'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
],
然后在模型中定义 connection 属性来指定使用哪个数据库连接。例如:
protected $connection = 'database2';
这样 Laravel Admin 就能正确识别跨库关联表的表名和字段名了。
原文地址: https://www.cveoy.top/t/topic/nbXX 著作权归作者所有。请勿转载和采集!