2

我将 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

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

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 的字段属性并将它们视为已更改。这很烦人,因为我必须扫描所有生成的脚本以检查它是否是我想要的。有解决方法吗?

4

1 回答 1

2

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

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

于 2012-10-09T17:38:36.173 回答