2

MySQL 5.1 で Symfony 1.4 と Propel 1.6 を使用しています。

少し変更を加えるたびにschema.xml(たとえば、1 つのテーブルに 1 つのフィールドを追加する)、次のように実行します。

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

alter table change2 番目のステップでは、タスクは常に、typeフィールドfieldのすべてのテーブル内のすべてのフィールドの SQL 文を生成する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

これは 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 に答える