【问题标题】:Artisan::call('migrate') stuck in column renamingArtisan::call('migrate') 卡在列重命名中
【发布时间】:2020-12-16 01:05:27
【问题描述】:

我目前正在从事的项目中有一个奇怪的行为。虽然我所有的迁移都可以通过使用php artisan migrate 的命令行正常工作,但它们不会通过 Artisan 命令运行。

我们的目标是创建一个新数据库并在那里运行迁移,因此我的该部分代码如下所示:

 \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 文件中手动更改我的数据库并运行迁移,它们将运行顺利而没有任何问题,但我希望它是动态创建和设置的,这就是我动态切换数据库的原因。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    显然修复是替换 1 行代码。

    而不是:

    \DB::connection('mysql')->reconnect();
    

    使用:

    \DB::purge('mysql');
    

    这似乎也删除了与教义冲突的旧缓存。

    【讨论】:

      猜你喜欢
      • 2017-08-08
      • 2019-01-12
      • 2021-06-06
      • 2017-01-07
      • 2018-07-28
      • 2014-08-05
      • 2017-01-06
      • 2017-09-27
      • 2016-09-07
      相关资源
      最近更新 更多