我正在使用Laravels迁移功能进行一些测试。
我的配置中有两个数据库,mysql
和appDb
。 mysql
是默认值。
我在迁移目录中创建了两个目录,
appDb
和coreDb
。我为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
参数指定的数据库。
答案 0 :(得分:0)
您需要在Schema::connection()
中命名要连接的实际数据库,以便执行特定数据库的迁移:
示例:
Schema::connection('testAppDb')->dropIfExists('testAppDb');