这个问题可能是由于 Laravel Admin 在进行跨库关联表字段排序时无法正确识别表名和字段名导致的。您可以尝试以下几个解决方法:

  1. 使用完整的表名和字段名

在排序字段中使用完整的表名和字段名来确保 Laravel Admin 能够正确识别它们。例如:

protected $sortable = [
    'table1.field1' => 'Field 1',
    'table2.field2' => 'Field 2',
];
  1. 使用别名

在跨库关联表时,您可以使用别名来简化表名和字段名。例如:

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',
];
  1. 修改配置

在 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 就能正确识别跨库关联表的表名和字段名了。

Laravel Admin 跨库关联表字段排序报错解决方案

原文地址: https://www.cveoy.top/t/topic/nbXX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录