Как построить саморегулирующиеся таблицы в Symfony с помощью Propel ORM

У меня ошибка при попытке построить модель из существующей базы данных в проекте Symfony с использованием Propel ORM.

Ошибка такая:

build-propel.xml: 474: 20: Отношение 1: 1, выраженное внешним ключом a_table_on_my_schema_FK_1, определено в обоих направлениях; Propel в настоящее время не поддерживает это (если у вас должны быть оба ограничения внешнего ключа, рассмотрите возможность добавления этого ограничения в пользовательский файл SQL.)

файл schema.yml действительно обширен, но описание таблицы, которая вызывает ошибку (первая неправильно создана), выглядит следующим образом:

self_referenced_table:
_attributes: { phpName: SelfReferencedTable }
[...]
JERARQUIC_CODE: { phpName: JerarquicCode, type: INTEGER, size: '8', required: false, foreignTable: self_referenced_table, foreignReference: JERARQUIC_CODE, onDelete: RESTRICT, onUpdate: RESTRICT }
[...]

Я думаю, что эта ошибка связана с таблицей, на которую ссылаются сами.

Мне нужно реализовать иерархическое отношение между многими элементами, поэтому эта реализация - хороший способ сделать это. Но вызывает у меня эту проблему на строительстве.

Можешь дать мне какие-нибудь подсказки? у кого-то была эта ошибка? что бы вы сделали?

Спасибо!! : D


person Andreu Ramos    schedule 30.06.2011    source источник
comment
Я не думаю, что это из-за само-ссылки table как таковой, а не столько из-за само-ссылки столбец в таблице. Мне кажется, что это не имеет смысла, так как если оно однозначно, то единственная запись, на которую он может ссылаться, - это сама себя. Вы уверены, что имеете в виду именно это?   -  person Colin Fine    schedule 06.07.2011
comment
ну, я совсем не уверен. Но при построении вылетает только саморегулирующаяся таблица. Если я удалю их из schema.yml, здание пойдет нормально   -  person Andreu Ramos    schedule 07.07.2011


Ответы (1)


Решено: как сказал @Colin Fine, это не была ошибка таблицы, ссылающейся на себя. Ошибка была в исходной базе данных. Я создал schema.yml из существующей базы данных на mysql. Ошибка была: целевой атрибут ссылки не был идентификатором таблицы, это был сам ссылочный атрибут. Итак, сгенерированный schema.yml содержал неправильные определения. Думаю, я недостаточно хорошо объяснил:

self_referenced_table была такой:

_attributes: { phpName: SelfReferencedTable }
[...]
JERARQUIC_CODE: { phpName: JerarquicCode, type: INTEGER, size: '8', required: false, foreignTable: self_referenced_table, foreignReference: JERARQUIC_CODE, onDelete: RESTRICT, onUpdate: RESTRICT }
[...]

self_referenced_table должен быть:

_attributes: { phpName: SelfReferencedTable } [...]
JERARQUIC_CODE: { phpName: JerarquicCode, type: INTEGER, size: '8', required: false, foreignTable: self_referenced_table, foreignReference: TABLE_CODE, onDelete: RESTRICT, onUpdate: RESTRICT }
[...]

person Andreu Ramos    schedule 14.07.2011