我使用doctrine migrations包来跟踪数据库结构的变化。我想确保在为我的应用程序部署/添加新服务器时:
对于(B)一个很好的例子是角色。我希望始终存在一组特定的角色。我意识到数据库迁移是可能的,但我不喜欢将模式更改与数据更改混合在一起的想法。此外,如果我使用MySql迁移,我将不得不为我的测试数据库创建一个等效的Sqlite迁移。
我知道的另一个选择是数据夹具。然而,通过阅读文档,我感觉夹具更适合加载测试数据。此外,如果我更改了角色名称,我不知道如何使用fixture更新它(因为它们要么在加载或追加之前删除数据库中的所有数据)。如果我使用append,那么唯一键也是一个问题。
我正在考虑创建某种带有一组配置文件的命令,并确保某些表始终处于与配置文件匹配的一致状态 - 但如果存在其他选项,我当然希望使用它。
处理将所需数据加载到数据库中的最佳方法是什么?
答案 0 :(得分:4)
如果您正在使用Doctrine Migrations,您可以使用整个数据库架构生成初始迁移,那么您应该为数据库结构中所做的所有更改生成迁移(doctrine:migrations:generate
或doctrine:migrations:diff
)并且还添加了将迁移现有数据的查询。
Fixtures旨在预先填充数据(doctrine:fixtures:load
),在我看来,它们应与最新数据库架构保持同步,并在{{{{{ 1}} / doctrine:migrations:migrate
。
最后:
doctrine:schema:create
只生成迁移文件并进行迁移)doctrine:schema:create
选项,只更新灯具而不是先删除所有数据库数据)然后,在部署新实例时,您可以运行--append
,然后doctrine:schema:create
(将所有迁移标记为已迁移,因为您已创建了最新架构)和doctrine:migrations:version --add --all --no-interaction
将填充数据到数据库(也是最新版本,因此不需要从Doctrine迁移文件迁移数据)。
注意:现有实例不应使用doctrine:fixtures:load
,而应仅使用doctrine:schema:update
。在我们的应用中,我们甚至在doctrine:migrations:migrate
:
app/console
这是我从经验中得出的结果。希望你会发现它很有用: - )