Laravel在不同的分支机构迁移

时间:2017-10-17 07:42:52

标签: laravel database-migration

在我的应用程序中,使用Laravel 5.1构建,我有一个分支开发。

我必须实现2个新功能,所以我创建了第一个分支(从dev开始)需要2个表(所以新的迁移),然后,当我完成它时,我创建了第二个分支(开始dev)并且这个功能需要一个不同的表,所以新的迁移。

所以我的情况如下:

branch 1 -> migration1
branch 2 -> migration2, migration3

但是现在我需要更改(很多列)与branch1相关的表,所以我应该回滚迁移,因为我不会进行新的迁移以进行更改,但我会回滚迁移并重新创建。

但我现在的问题是,如果我在branch1中返回并试图这样做:

php artisan:migrate rollback

最新的迁移(在我的数据库中)是branch2(migration2,migration3)的表,而不是与branch1(migration1)相关的表。

那么在许多分支之间管理迁移的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

当我在较大的项目中创建新分支时。例如,当开始重构时。我创建数据库的副本,并在此副本之前添加分支名称。切换回当前的主分支或生产分支以快速修复错误时,这可以省去很多麻烦。...这样,您将永远不会遇到问题中所述的任何迁移冲突。

切换分支时,我会更新.env数据库名称,并清除应用程序的缓存。这样Laravel就开始使用与您的应用程序/迁移所处的状态相对应的数据库。

php artisan config:cache
php artisan config:clear
php artisan cache:clear

答案 1 :(得分:0)

我建议创建数据库表的副本,并在您的.env文件中表示它们:

DB_DATABASE_BRANCH=branchtable
DB_DATABASE=mastertable

然后切换到分支,并将config/database.php的数据库驱动程序更改为DB_DATABASE_BRANCH

'database' => env('DB_DATABASE_BRANCH', 'forge'),

由于git跟踪config/database.php,因此在使用git checkout ***时将自动切换数据库。这是Odyssee解决方案的更好选择,因为您在切换分支机构时无需触摸.env文件。

查看我的blog post以获得更多详细信息。