如何在不破坏版本表的情况下正确扩展Propel的现有架构?

时间:2013-03-08 16:05:37

标签: schema versioning propel extend

我想在现有表(Book)中添加一列(IS_ACTIVE)。所以我相应地扩展了模式文件(schema.xml)。我按照文档中的描述完成了以下命令。

propel-gen om
propel-gen convert-conf
propel-gen sql

我从schema.sql文件中删除了所有不必要的部分,这样只会删除并重新创建受影响的表。然后我执行了:

propel-gen insert-sql

不幸的是,版本表在此过程中尚未更新,产生插入错误,例如此错误

Unable to execute SELECT statement [SELECT book_version.ID, book_version.TITLE,
 book_version.URL, book_version.COMMENTS, book_version.IS_ACTIVE,
 book_version.VERSION FROM `book_version` WHERE book_version.ID=:p1 ORDER BY 
 book_version.VERSION DESC LIMIT 1] [wrapped: SQLSTATE[42S22]: Column not found:
 1054 Unknown column 'book_version.IS_ACTIVE' in 'field list']

致电

$book->save();

如何在不遇到此问题的情况下正确扩展现有的schema.xml?

2 个答案:

答案 0 :(得分:4)

首先将buildtime-conf.xml文件作为runtime-conf.xml上的相同位置创建,内容也与runtime-conf.xml相同。

然后逐个执行命令。

  1. propel-gen diff
  2. propel-gen迁移
  3. prople-gen om
  4. propel-gen convert-conf

    我认为这会对你有帮助。

  5. 感谢。

答案 1 :(得分:1)

正如所建议的那样,您应该从生成的SQL文件(schema.sql)中剪切任何SQL语句,引用应保持原样的表。但除了引用应该更改的表的语句之外,还需要在此文件中包含引用相应版本表的语句。然后你可以运行

propel-gen insert-sql

这应该可以解决问题。