在具有Doctrine2和Symfony2的自引用表中持久化多个新关联对象
我对Doctrine2很陌生,我目前正在一个Symfony2项目中使用Doctrine2。 我正在尝试使用自引用外键(如条令文档的类别示例)来持久化实体(http://www.doctrine-project.org/docs/orm/2.0/en/reference/association-mapping.html#one-对许多人来说(自我参照)。可能有一个非常简单的解决方案,但我就是在网上找不到 出于某种原因,虽然我可以访问作为父对象分配的对象的id值,但父对象的id值不是由原则自动存储的(它为null)。 有些代码可能很简单。以下是相关部分: 实体定义:在具有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值不是由原则自动存储的
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());
谁能解释一下条令是如何管理自引用对象的数据库持久性序列的吗?红色警报!您正在使用自引用来表示层次结构。如果这个层次结构可以很深(可以),那么在编写查询时就会出现一些问题。您可以,并使用,以便能够使用嵌套集模型来表示您的区域,并避免许多麻烦。您是对的。虽然我最终成功了,但这根本不是一个好方法。干杯你能解释一下你是怎么做到的吗?红色警报!您正在使用自引用来表示层次结构。如果这个层次结构可以很深(可以),那么在编写查询时就会出现一些问题。您可以,并使用,以便能够使用嵌套集模型来表示您的区域,并避免许多麻烦。您是对的。虽然我最终成功了,但这根本不是一个好方法。干杯你能解释一下你是怎么做到的吗?