propel:diff任务为所有字段/表生成不必要的SQL语句

时间:2012-09-26 09:23:39

标签: symfony1 symfony-1.4 propel

我正在使用Symfony 1.4和Propel 1.6和MySQL 5.1。

每次我对schema.xml进行少量更改(例如在一个表中添加一个字段)时,我都会执行:

php symfony propel:build-all --classes-only --env=dev
php symfony propel:diff --env=dev
php symfony propel:up --env=dev

在第二步中,任务总是为alter table change字段字段integer not null类型的所有表中的所有字段生成SQL语句,或者删除/创建不具有完全改变:

ALTER TABLE `pedido_linea` CHANGE `id` `id` INTEGER(11) NOT NULL AUTO_INCREMENT;
ALTER TABLE `product` CHANGE `norma_id` `norma_id` INTEGER(11);
...
ALTER TABLE `pedido_linea` DROP FOREIGN KEY `pedido_linea_FK_2`;
ALTER TABLE `pedido_linea` ADD CONSTRAINT `pedido_linea_FK_2`
    FOREIGN KEY (`product_id`)
    REFERENCES `product` (`id`)
    ON UPDATE RESTRICT
    ON DELETE RESTRICT;

似乎Propel没有正确读取MySQL的字段属性并将它们视为已更改。这非常烦人,因为我要扫描所有生成的脚本以检查它是否是我想要的。有解决方法吗?

1 个答案:

答案 0 :(得分:2)

Mysql不为外键提供RESTRICT约束,因为它与NO ACTIOn相同或没有定义约束(参见http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

删除ON UPDATE和ON DELETE行,你应该是好的