【问题标题】:Laravel migration in different branchesLaravel 不同分支的迁移
【发布时间】:2018-03-28 20:10:47
【问题描述】:

在我使用 Laravel 5.1 构建的应用中,我有一个分支 dev。

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

所以我的情况是这样的:

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

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

但我现在的问题是,如果我返回分支 1 并尝试这样做:

php artisan:migrate rollback

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

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

【问题讨论】:

  • 首先在branch2 回滚迁移,然后移动到branch1 并进行更改。
  • 谢谢你的回答,是的,但我相信这种方式很混乱,现在这不是问题,因为只有 2 个分支,只有 2 个特性,但如果我有很多分支,有很多迁移,我应该进入任何分支并一一回滚。
  • 但是没有别的办法。这就是 git 和迁移的工作原理。
  • 好的,谢谢你的回答!

标签: laravel database-migration


【解决方案1】:

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

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

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

【讨论】:

  • 只需要php artisan config:cache
【解决方案2】:

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

DB_DATABASE_BRANCH=branchtable
DB_DATABASE=mastertable

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

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

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

查看我的blog post 了解更多详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 2012-09-24
    • 2019-12-27
    相关资源
    最近更新 更多