propel:diff задачата генерира ненужни SQL изречения за всички полета/таблици

Използвам 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 changefieldfieldinteger 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 и ги третира като променени. Много е досадно, защото трябва да сканирам целия генериран скрипт, за да проверя дали е това, което искам да бъде. Има ли решение за това?


person Aitor    schedule 26.09.2012    source източник


Отговори (1)


Mysql не предоставя ограничението RESTRICT за външни ключове, тъй като това е същото като NO ActionOn или няма дефинирано ограничение (вижте http://dev.mysql.com/doc/refman/5.5/en/innodb)-foreign-key-constraints.html)

Премахнете редовете ON UPDATE и ON DELETE и трябва да сте добре

person Mvonahn    schedule 09.10.2012
comment
Това не е въпросът, защото се случва при всички ограничения, като RESTRICT, SETNULL или CASCADE. Въпросът е, че propel интерпретира, че всички полета се променят, когато изобщо не се променят: - person Aitor; 07.02.2013