在具有Doctrine2和Symfony2的自引用表中持久化多个新关联对象

在具有Doctrine2和Symfony2的自引用表中持久化多个新关联对象,symfony,doctrine,Symfony,Doctrine,我对Doctrine2很陌生,我目前正在一个Symfony2项目中使用Doctrine2。 我正在尝试使用自引用外键(如条令文档的类别示例)来持久化实体(http://www.doctrine-project.org/docs/orm/2.0/en/reference/association-mapping.html#one-对许多人来说(自我参照)。可能有一个非常简单的解决方案,但我就是在网上找不到 出于某种原因,虽然我可以访问作为父对象分配的对象的id值,但父对象的id值不是由原则自动存储的

我对Doctrine2很陌生,我目前正在一个Symfony2项目中使用Doctrine2。 我正在尝试使用自引用外键(如条令文档的类别示例)来持久化实体(http://www.doctrine-project.org/docs/orm/2.0/en/reference/association-mapping.html#one-对许多人来说(自我参照)。可能有一个非常简单的解决方案,但我就是在网上找不到

出于某种原因,虽然我可以访问作为父对象分配的对象的id值,但父对象的id值不是由原则自动存储的(它为null)。 有些代码可能很简单。以下是相关部分:

实体定义:

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(); 
结果数组将以细枝形式输出分配的ID。我还尝试使用:

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

谁能解释一下条令是如何管理自引用对象的数据库持久性序列的吗?

红色警报!您正在使用自引用来表示层次结构。如果这个层次结构可以很深(可以),那么在编写查询时就会出现一些问题。您可以,并使用,以便能够使用嵌套集模型来表示您的区域,并避免许多麻烦。您是对的。虽然我最终成功了,但这根本不是一个好方法。干杯你能解释一下你是怎么做到的吗?红色警报!您正在使用自引用来表示层次结构。如果这个层次结构可以很深(可以),那么在编写查询时就会出现一些问题。您可以,并使用,以便能够使用嵌套集模型来表示您的区域,并避免许多麻烦。您是对的。虽然我最终成功了,但这根本不是一个好方法。干杯你能解释一下你是怎么做到的吗?