我正在寻求有关推进式迁移功能的一些帮助。
如果字段已在schema.xml中重命名,则删除字段并使用新名称创建另一个字段。
购买此导致指定列的数据丢失...我如何阻止推进?
我的测试用例如下:
以前插入"标题"的数据字段现在是空的。
在查看迁移类时,它包含:
ALTER TABLE `city`
ADD
(
`title` VARCHAR(255) NOT NULL
),
DROP `name`;
答案 0 :(得分:3)
当您更改XML中的列名时,Propel(也没有任何其他工具)无法知道您已重命名该列,或者您是否要删除旧列并添加新列。
它将XML与数据库区分开来,并在数据库中看到XML(标题)中不存在的列,因此它会删除该列。然后它会在XML中看到一个在数据库(名称)中不存在的列,因此它会为您创建列标题。
如果要重命名列,则应手动执行此操作。
答案 1 :(得分:0)
我知道这是一个非常古老的问题,但解决这个问题的简单方法是重命名xml中的列,然后生成diff。之后进入生成的迁移并修改它以重命名列而不是删除并添加它。然后,当您运行迁移时,它将正常工作。
如果您的数据库引擎是MySQL,则代码如下
ALTER TABLE" table_name" 更改"第1列和第34列; "第2栏" ["数据类型"];