【发布时间】:2018-08-12 22:17:20
【问题描述】:
我有两个 Laravel 项目,一个面向客户(我们称之为project A),另一个用于管理(我们称之为project B)。
如果我更新数据库,例如创建新表或在现有表上添加额外的列,使用 Laravel 从project B 迁移,project A 端是否需要任何操作?
谢谢!
【问题讨论】:
标签: laravel laravel-5 laravel-migrations
我有两个 Laravel 项目,一个面向客户(我们称之为project A),另一个用于管理(我们称之为project B)。
如果我更新数据库,例如创建新表或在现有表上添加额外的列,使用 Laravel 从project B 迁移,project A 端是否需要任何操作?
谢谢!
【问题讨论】:
标签: laravel laravel-5 laravel-migrations
如果您进入数据库并执行select * from migrations,这应该可以帮助您查看artisan migrate 命令引用的内容以决定是否运行迁移。
我会和你一起考虑的:
如果您在项目 A 中创建迁移并运行它,它将更新您的数据库,并且您数据库中的迁移表将记录迁移已运行。
项目 B 不会在应用程序的自己的数据库/迁移文件夹中进行迁移。因此,如果您执行artisan migrate --pretend,实际情况是它会在迁移表中找到它在其自己的数据库/迁移文件夹中没有作为迁移文件记录的条目。
我实际上不确定它会在那里做什么。
但是让多个应用程序使用一个数据库绝对是您在这里尝试做的合理的事情。这是正常的做法。
为什么不直接决定哪个应用程序,A 或 B,您将负责持有所有迁移,并且知道您只会在项目 A 中执行 artisan make:migration 和 artisan migrate,然后考虑一下项目 B 成为项目 A 实际“拥有”的数据库的第二个客户?
因此,鉴于上述情况,我认为您的问题的答案是否定的。您不必必须在 laravel 应用程序中使用迁移系统。您也可以连接到数据库并假设您的代码想要的任何表都已经存在,这将是您的项目 B 将执行的操作。
(但让您的管理员成为数据库迁移的所有者(您实际上在上面称为项目 B)可能是有意义的)。
同样,如果使用 eloquent,那么两个项目都将需要各自的 eloquent 模型。您至少必须复制该代码。
【讨论】:
您可以在project A 中创建first_migration 并执行它,然后在project B 中创建second_migration 并执行它,您会发现迁移按预期工作。
但是...当您尝试rollback 在任何项目中进行迁移时,您可能会收到Migration not found 错误,因为rollback 操作将在每个迁移文件中调用down 方法已迁移,但 project A 或 project B 包含所有迁移文件的一部分。
因此,您可以使用 --path 将所有迁移文件放在一起:
php artisan make:migration foo --path="../projectB/database/migrations"
# or
php artisan make:migration foo --path="/the/absolute_path/to/projectB/database/migrations" --realpath
# migrate
php artisan migrate --path="../projectB/database/migrations"
# migrate:rollback
php artisan migrate:rollback --path="../projectB/database/migrations"
【讨论】: