Propel正在删除数据库列而不是仅重命名它

时间:2014-05-15 09:32:43

标签: migration field rename propel

我正在寻求有关推进式迁移功能的一些帮助。

如果字段已在schema.xml中重命名,则删除字段并使用新名称创建另一个字段。

购买此导致指定列的数据丢失...我如何阻止推进?

我的测试用例如下:

  • 在schema.xml中创建一个名为" title"
  • 的字段
  • 在数据库中插入数据
  • 重命名字段" title" to" name"
  • 从数据库发出选择。

以前插入"标题"的数据字段现在是空的。

在查看迁移类时,它包含:

ALTER TABLE `city`

  ADD
(
    `title` VARCHAR(255) NOT NULL
),

  DROP `name`;

2 个答案:

答案 0 :(得分:3)

当您更改XML中的列名时,Propel(也没有任何其他工具)无法知道您已重命名该列,或者您是否要删除旧列并添加新列。

它将XML与数据库区分开来,并在数据库中看到XML(标题)中不存在的列,因此它会删除该列。然后它会在XML中看到一个在数据库(名称)中不存在的列,因此它会为您创建列标题。

如果要重命名列,则应手动执行此操作。

答案 1 :(得分:0)

我知道这是一个非常古老的问题,但解决这个问题的简单方法是重命名xml中的列,然后生成diff。之后进入生成的迁移并修改它以重命名列而不是删除并添加它。然后,当您运行迁移时,它将正常工作。

如果您的数据库引擎是MySQL,则代码如下

ALTER TABLE" table_name" 更改"第1列和第34列; "第2栏" ["数据类型"];

http://www.w3schools.com/sql/sql_alter.asp