使用Doctrine2和Symfony2在自引用表中保留多个新的关联对象

时间:2011-11-12 15:35:26

标签: symfony doctrine

我对Doctrine2很新,我目前正在Symfony2项目中使用它。 我试图用自引用外键来持久化实体,例如Doctrine文档的类别示例(http://www.doctrine-project.org/docs/orm/2.0/en/reference/association-mapping。 HTML#一个一对多自参照)。可能有一个非常简单的解决方案,但我无法在网络上的任何地方找到它。

由于某种原因,parent_id的值不会由Doctrine自动存储(它为空),尽管我可以访问我指定为父项的对象的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中输出指定的ID。我也尝试过使用:

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

有人可以解释Doctrine如何管理自引用对象的数据库持久性序列吗?

0 个答案:

没有答案