Laravel:仅 运行 迁移针对特定数据库引擎
Laravel: Only run migration targeting a specific database engine
我们的代码库目前位于 mariadb 集群后端 (10.4),我们需要让它也能够利用 DigitalOcean 的托管数据库 (mySQL 8)。
Laravel 的 password_resets 迁移不包含 PK,这只是 DO Managed DB 的一个问题,可以通过在有问题的迁移之前添加以下内容来临时设置为忽略它:
DB::statement("SET SQL_REQUIRE_PRIMARY_KEY = OFF;");
不幸的是,由于 mariaDB 不理解这个语句,它会抛出一个错误“UNKNOWN system variable”。
我如何才能将语句定位到特定的数据库引擎版本,或者在语句出错时允许忽略该语句?
我通过将以下行添加到 config/database.php
中的 mysql 连接来修复此问题
'mysql8' => env('DB_MYSQL8', false),
然后在 create_password_resets_table
中添加一个支票作为
if(config('database.connections.mysql.mysql8')) {
DB::statement("SET SQL_REQUIRE_PRIMARY_KEY = OFF;");
}
最后,如果数据库在 DO Managed Databases 上 运行,请将以下内容添加到 .env
DB_MYSQL8=true
我们的代码库目前位于 mariadb 集群后端 (10.4),我们需要让它也能够利用 DigitalOcean 的托管数据库 (mySQL 8)。
Laravel 的 password_resets 迁移不包含 PK,这只是 DO Managed DB 的一个问题,可以通过在有问题的迁移之前添加以下内容来临时设置为忽略它:
DB::statement("SET SQL_REQUIRE_PRIMARY_KEY = OFF;");
不幸的是,由于 mariaDB 不理解这个语句,它会抛出一个错误“UNKNOWN system variable”。
我如何才能将语句定位到特定的数据库引擎版本,或者在语句出错时允许忽略该语句?
我通过将以下行添加到 config/database.php
'mysql8' => env('DB_MYSQL8', false),
然后在 create_password_resets_table
中添加一个支票作为
if(config('database.connections.mysql.mysql8')) {
DB::statement("SET SQL_REQUIRE_PRIMARY_KEY = OFF;");
}
最后,如果数据库在 DO Managed Databases 上 运行,请将以下内容添加到 .env
DB_MYSQL8=true