Laravel artisan 迁移多个数据库
Posted
技术标签:
【中文标题】Laravel artisan 迁移多个数据库【英文标题】:Laravel artisan migrate multiple database 【发布时间】:2017-06-11 04:19:33 【问题描述】:我正在使用 Laravel 迁移功能进行一些测试。
我的配置中有两个数据库,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
参数指定的数据库。
【问题讨论】:
【参考方案1】:您需要在Schema::connection()
中命名您要连接的实际数据库,以便执行特定数据库的迁移:
示例:
Schema::connection('testAppDb')->dropIfExists('testAppDb');
【讨论】:
以上是关于Laravel artisan 迁移多个数据库的主要内容,如果未能解决你的问题,请参考以下文章
Laravel php artisan 迁移空数据库上的错误
使用“php artisan migrate”命令时 Laravel 数据库迁移外键错误
如何在 laravel 中使用“php artisan migrate”迁移我的数据库