2012-02-07 3 views
6

У меня есть отношения с Assembly to ComponentSlot. Это отношения OneToMany.Doctrine/Symfony2 OneToMany foreign_id сохраняет как NULL

Схема, сгенерированная в базе данных, абсолютно прекрасна. Правильные столбцы, правильные индексы и отношения.

Форма Symfony2 AssemblyType имеет набор ComponentSlotType. Я могу добавить несколько дочерних компонентов ComponentSlot. При сохранении все дочерние элементы Assembly и ComponentSlot сохраняются отлично, за исключением того, что assembly_id имеет значение NULL в таблице слотов компонентов.

Я скопировал настройки, которые у меня были в предыдущем проекте, который полностью сохранил отношения, я полностью в тупике. Каскадный упор устанавливается на поля ComponSlots Assembly, и мой прошлый опыт работы с OneToMany заключается в том, что мне не нужно ничего делать здесь, его следует позаботиться.

Все указатели будут оценены :)

+0

Как вы устанавливаете отношения? Какие методы вы называете? – greg0ire

+0

Как я уже сказал, у меня есть проект, который уже работает с отношениями OneToMany, установленными в том же (явно не;)) способом. В этом проекте родитель имеет 'addLink (Link $ link)' и он вызывает только $ this-> link [] = $ link'. Действительно, документация по адресу http://symfony.com/doc/2.0/book/doctrine.html подтверждает, что ссылка на родительский элемент и элементы детской коллекции автоматически. Это должно быть автоматическим, моим предыдущим проектом, документацией и тем фактом, что doctrine: generate: сущности не устанавливают, что отношения в методе автогенерации add предполагают, что моя модель в порядке, а что-то еще в порядке – PorridgeBear

+0

Я думал, что у меня это было почти - by_reference в поле формы коллекции было опущено, а не установлено в false. Однако это не изменило идентификатор, который хранится для детей. – PorridgeBear

ответ

4

Проверьте вашу предыдущую настройку. Я подозреваю, что у вас есть что-то вроде:

// Assembly 
public function addComponentSlot($componentSlot) 
{ 
    $this->componentSlots[] = $componentSlot; 

    $componentSlot->setAssembly($this); // Probably left this out when you copied? 
} 
+0

Нет, добавив, это ничего не меняет. Я также пробовал это на 'setComponentSlots', который Symfony2 использует по запросу-> bindRequest, чтобы установить объекты вверх, и это тоже не работает. – PorridgeBear

Смежные вопросы