【发布时间】:2021-07-03 08:59:29
【问题描述】:
我们的代码库目前位于 mariadb 集群后端 (10.4) 上,我们需要让它也能够利用 DigitalOcean 的托管数据库 (mySQL 8)。
Laravel 的 password_resets 迁移不包含 PK,这只是 DO 托管数据库的问题,可以通过在有问题的迁移之前添加以下内容来临时设置为忽略它:
DB::statement("SET SQL_REQUIRE_PRIMARY_KEY = OFF;");
不幸的是,mariaDB 不理解这个语句,它会抛出一个错误为“UNKNOWN system variable”。
如何将语句定位到特定的数据库引擎版本,或者在语句出错时允许忽略该语句?
【问题讨论】:
-
您可以简单地将该语句包装在
if(config('database.connection') == 'mysql'){ ... }(或!= 'maria'等,任何适合您的配置)中。 -
不理想,但我没想过用 config/env 配置解决它。所以不必复制数据库连接,一个额外的 envvar 作为
MYSQL8=true,默认为 false 似乎是一个简单的修复。谢谢! -
同意,不理想,但不幸的是
DB::statement()函数与 DB 无关。您在其中写入的任何内容都将逐字执行,如果它与当前数据库不兼容,它将失败。这就是为什么你应该尽可能尝试使用 Eloquent,但如果你不能(比如这个用例),则需要额外的约束。一旦你得到这个工作,请随意添加你的解决方案作为答案。干杯!