2012-09-23 4 views
2
/** @Entity */ 
class First 
{ 
    /** @OneToMany(targetEntity="Second", mappedBy="parent") */ 
    protected $secondList; 

    // access methods here 
    public function __construct() 
    { 
     $this->secondList = new ArrayCollection(); 
    } 
} 

/** @Entity */ 
class Second 
{ 
    /** 
    * @ManyToOne(targetEntity="First", inversedBy="secondList") 
    * @JoinColumn(name="First_id", referencedColumnName="Id") 
    */ 
    protected $parent; 
} 

Вот проблема с принятием в ArrayCollection $secondList элементов из категории Second. Second Отношение ManyToOne работает правильно. Возможно, я сделал что-то неправильно при инициализации стойкости (потому что First_Id в базе SQL всегда null).Doctrine 2: OneToMany отношение

Любые предложения?

ответ

1

Doctrine2 docs сказать:

In the case of bi-directional associations you have to update the fields on both sides: 

Это означает, что вы должны сделать что-то вроде:

$second->setParent($first); 

Как $secondтаблицы имеет внешний ключ. Или вы можете добавить опцию cascade={"persist"} в категорию $first->secondList.

+0

Хорошо, это действительно помогает мне установить столбец First_Id во второй таблице записей. Однако попытка получить объект First class не берет Second's в 'ArrayCollection'. У меня только пустая коллекция: | –

+0

так что в дБ все в порядке? Как вы собираете материал? и как вы проверяете, что у вас есть? Потому что, когда вы вызываете $ first-> getSecond(), он должен загрузить его. – Pinetree

+0

И действительно, это то, что я делаю. DB в порядке (в конечном итоге схема была создана с помощью набора инструментов doctrine). Я получаю объекты, используя методы find() или getRepository() из класса EntityManager. Объекты были созданы правильно, даже я получаю только объекты класса «Второй». Я имею полное отношение к объекту класса «Первый». О, и я проверяю этот список, используя 'serialize ($ first-> getSecondList() -> current())', coz, берущий материал '$ takedSecond-> getSomeOtherValue()' показывает ошибку в использовании метода для не-объектной переменной. –

1

Вы должны убедиться, что вы закрываете скобки в первом классе.

/** @OneToMany(targetEntity = "Second", mappedBy = "parent") */ 

Если это не проблема - есть ли сообщения об ошибке?

+0

О, тиф. Нет сообщения об ошибке, но если я пытаюсь перенести объект первого класса до второго, возникает ошибка в использовании каскадного сопоставления (какой-то атрибут, я нашел, что в ссылках на доктрину о необходимости использования). –

+0

Попытайтесь добавить это к своим отношениям OneToMany (для каскадной ошибки): 'cascade = {" persist "}' Я не совсем уверен, что представляет собой другая проблема ... Все ли сохранено в базе данных? – mbinette

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