Laravel工匠迁移多个数据库

时间:2017-01-25 20:14:54

标签: php mysql laravel migration artisan

我正在使用Laravels迁移功能进行一些测试。

我的配置中有两个数据库,mysqlappDbmysql是默认值。 我在迁移目录中创建了两个目录, appDbcoreDb。我为appDb目录中的appDb创建了一个迁移,并为coreDb数据库的mysql目录创建了一个迁移。

现在,要运行coreDb迁移,我只需使用命令

php artisan migrate --path database/migrations/coreDb

输出:

Migrated: 2017_01_25_195008_initial_core_database

它工作正常,我在coreDb下的迁移中创建的表现在位于mysql配置中指定的数据库中。

现在我想进行appDb目录中指定的更改,但仅限于appDb配置中指定的数据库。

php artisan migrate --database appDb --path database/migrations/appDb

运行良好:

Migration table created successfully.
Migrated: 2017_01_25_194957_initial_app_database

当我打开appDb配置中指定的数据库时,它会显示迁移表,并显示它运行2017_01_25_194957_initial_app_database迁移。但是我在2017_01_25_194957_initial_app_database迁移中创建的表最终在另一个数据库中,该数据库在其迁移表中没有此迁移的记录。

似乎它使用--database之后指定的数据库来存储有关迁移的信息,但是没有实际执行迁移?

其他人有过这方面的经历吗? 关于如何调试这个的想法?

我也试过这样做:

Schema::connection($this->getConnection())->dropIfExists('testAppDb');

但是迁移类的$this->getConnection()返回NULL,即使我有--database参数指定的数据库。

1 个答案:

答案 0 :(得分:0)

您需要在Schema::connection()中命名要连接的实际数据库,以便执行特定数据库的迁移:

示例:

Schema::connection('testAppDb')->dropIfExists('testAppDb');