我对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如何管理自引用对象的数据库持久性序列吗?