Сохранение нескольких новых связанных объектов в самоссылающейся таблице с помощью Doctrine2 и Symfony2 - PullRequest
2 голосов
/ 12 ноября 2011

Я довольно новичок в Doctrine2, который я сейчас использую в проекте Symfony2. Я пытаюсь сохранить сущности с внешним ссылочным внешним ключом, таким как пример категории документации Doctrine (http://www.doctrine -project.org / docs / orm / 2.0 / en / reference / association-mapping.html # one- ко-многим-автореферентных). Вероятно, есть очень простое решение, но я просто не мог найти его в Интернете.

По какой-то причине, значение для parent_id не сохраняется автоматически Doctrine (оно равно null), хотя я могу получить доступ к значению id объекта, который я назначаю в качестве родителя. Некоторый код, вероятно, будет простым. Вот соответствующая часть:

Определение сущности:

class Area
{
     // id, name, type, etc...

    /**
     * @ORM\ManyToOne(targetEntity="Area", inversedBy="sub_areas", cascade={"persist"})
     * @ORM\JoinColumn(name="parent_area_id", referencedColumnName="id")
     */
    private $parent_area;

    /**
     * @ORM\OneToMany(targetEntity="Area", mappedBy="parent_area", cascade={"persist"})
     */
    private $sub_areas;

    /**
     * Set parent area
     *
     * @param obj $area
     */
    public function setParentArea(Area $area)
    {
        $this->aera = $area;
    }

    // Other getters and setters, etc.
}

В действии:

$results = array();

foreach($area_types as $key => $type) {
    $area = new Area();
    $area->setType($type);
    $area->setName($location->getAddressComponent($type));

    if(isset($parent_area)) {
        $area->setParentArea($parent_area);
    }

    $this->em->persist($area);
    $parent_area = $area;
    $results[] = $area->getId();
}

$this->em->flush(); 

Массив результатов выведет назначенные идентификаторы в Twig. Я также пытался использовать:

 $area->setParentAreaId($parent_area->getId());

Может ли кто-нибудь объяснить, как Doctrine управляет последовательностью сохраняемости базы данных объектов, на которые есть ссылки?

...