2010-12-03 47 views
4

我想在我的环境中部署Doctrine迁移以处理多个开发人员之间的数据库更改。我以前没有用过它们,但是我已经完成了对这个问题的研究。Doctrine Migrations Re。 Fixtures

我现在唯一关心的是[据我所知]原则迁移不允许修改夹具。虽然我意识到迁移是用于原理图变更的,但我认为夹具变更同样重要。

我想参考表的灯具是我的数据库(即* _type,* _source等),我觉得行添加/删除/更新也应该由这些迁移来处理,因为它们是与任何结构性变化一样重要。

如果有人能指出我在这里正确的方向,它将不胜感激。

更新

我探索的只是让SVN跟踪我的参考表灯具的想法,但是这将是是一个undeployable解决方案。由于外键约束,表格将无法被截断/重新填充。

回答

2

正如您所指出的那样,迁移是为了便于对数据库进行结构更改,而不是根据它们操纵您的夹具数据。

根据我的经验,在开发应用程序时使用迁移不一定是最有效的方式,特别是如果开发人员A创建新迁移并且不立即提交,并且开发人员B还创建新的迁移(不知不觉)与开发者A的迁移冲突,然后立即检查。开发人员A很快就会检查他(或她)的迁移情况,并且你有两个相互冲突的迁移,并且全球都在爆炸。

我想说,更好的方法(尽管更加冗长)可以在schema.yml中进行模式更改,应用模式更改(使用私有迁移或手动方式),然后提交您的夹具数据。

如果您选择在开发中进行迁移,也许您应该考虑使用Doctrine Migration类的->postUp()->preUp()方法来原位转换您的数据。

+0

这似乎正是我正在寻找的(参考http://www.doctrine-project.org/projects/orm/1.2/docs/manual/migrations/en#writing-migration-classes:pre-and -post-钩)。谢谢,贾明先生。 此外,虽然您的方法似乎是更好的方法,但我不确定将定期结构更改转换为生产是多么容易。 – Craige 2010-12-08 13:51:19