在我目前的项目中,我有一个奇怪的行为。虽然我所有的迁移都在使用php artisan migrate的命令行中运行良好,但它们并不在Artisan命令中运行。
我们的目标是旋转一个新的DB并在那里运行迁移,所以我的代码如下所示:
\DB::statement("CREATE DATABASE TESTDB");
\DB::disconnect('mysql');
\Config::set('database.connections.mysql.database', 'TESTDB');
\DB::connection('mysql')->reconnect();
\Artisan::call('migrate',
[
'--database' => 'mysql',
'--path' => 'database/migrations'
]);数据库是成功创建的,因此那里没有问题,迁移开始运行,但在迁移中总是失败,这些迁移与重命名列有关,声称该列不在那里。
错误消息
“表中没有名称为'parent_version_id‘的列
但列仍然在那里,只是没有重新命名。
重命名迁移行:
$table->renameColumn('parent_version_id', 'child_version_id');如果我删除这一行,迁移将运行(当然不会重命名它将传递的列),并将在下一次重命名迁移时失败。
请记住,如果我手动更改env文件中的db并运行迁移,它们将顺利运行,不会出现任何问题,但我希望动态地创建并设置它,这就是我动态切换db的原因。
发布于 2020-08-27 10:03:03
显然,修复是在替换1行代码。
而不是:
\DB::connection('mysql')->reconnect();所用:
\DB::purge('mysql');这似乎也删除了旧的缓存,这是与理论冲突。
https://stackoverflow.com/questions/63611043
复制相似问题