Laravel artisan 迁移多个数据库

Posted

技术标签:

【中文标题】Laravel artisan 迁移多个数据库【英文标题】:Laravel artisan migrate multiple database 【发布时间】:2017-06-11 04:19:33 【问题描述】:

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

我的配置中有两个数据库,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】:

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

示例:

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

【讨论】:

以上是关于Laravel artisan 迁移多个数据库的主要内容,如果未能解决你的问题,请参考以下文章

Laravel php artisan 迁移空数据库上的错误

使用“php artisan migrate”命令时 Laravel 数据库迁移外键错误

如何在 laravel 中使用“php artisan migrate”迁移我的数据库

MongoDB 和 Artisan 在 Laravel 5 和 Lumen 上进行迁移

php laravel artisan 迁移模型中的错误?

运行 php artisan 将表从 laravel 应用程序迁移到 localhost 数据库时的问题