我正在使用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的字段属性并将它们视为已更改。这非常烦人,因为我要扫描所有生成的脚本以检查它是否是我想要的。有解决方法吗?
答案 0 :(得分:2)
Mysql不为外键提供RESTRICT约束,因为它与NO ACTIOn相同或没有定义约束(参见http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html)
删除ON UPDATE和ON DELETE行,你应该是好的