我正在尝试创建一个针对同一实体的多对多外键表关系。
我已成功创建与其他实体的关系,但在定位同一实体时遇到了麻烦。
我读了一些堆栈溢出问题和答案,看到我正在做的事情是可能的..
I based my class of this example - 当我添加父级时,表unit_relations
为空,但在将子项添加到单元时起作用。我假设因为该字段具有inversedBy
注释。
我需要添加什么才能进行双向更新/插入?
I tried swapping the joinColums like this answer - 没什么......
-
/**
* Unit
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Acme\DemoBundle\Entity\UnitRepository")
*/
class Unit
{
....
/**
* @ORM\ManyToMany(targetEntity="Unit", inversedBy="parents")
* @ORM\JoinTable(name="unit_relations",
* joinColumns={@ORM\JoinColumn(name="unit_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="child_unit_id", referencedColumnName="id")}
* )
*/
private $children;
/**
* @ORM\ManyToMany(targetEntity="Unit", mappedBy="children")
*/
private $parents;
}
正在添加inversedBy
而不是mappedBy
,而且还会交换连接列,这是正确的方法吗?
有人可以解释一下吗?
/**
* @ORM\ManyToMany(targetEntity="Unit", inversedBy="parents")
* @ORM\JoinTable(name="unit_relations",
* joinColumns={@ORM\JoinColumn(name="unit_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="child_unit_id", referencedColumnName="id")}
* )
*/
private $children;
/**
* @ORM\ManyToMany(targetEntity="Unit", inversedBy="children")
* @ORM\JoinTable(name="unit_relations",
* joinColumns={@ORM\JoinColumn(name="child_unit_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="unit_id", referencedColumnName="id")}
* )
*/
private $parents;
修改
这里要求的是显示我如何创建关系的代码。我刚才意识到这可能是因为实体没有id,因为我在创建时添加了关系...
$unit = new \Acme\DemoBundle\Entity\Unit();
/* @var $parentUnit \Acme\DemoBundle\Entity\Unit */
$parentUnit = $this->getDoctrine()->getRepository('AcmeDemoBundle:Unit')->findById($request->get('unitId'));
$unit->addParent($parentUnit);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($unit);
$entityManager->flush();
答案 0 :(得分:1)
添加父关系时没有ID并不重要。
我不能详细解释为什么会发生这种情况,但我认为主要的问题是,在多对多自我引用中,使用JoinTable注释的属性可能是主实体。你可以说,它拥有"与该实体的所有其他关系。
您可以在更改功能$unit->addParent($parent)
时接收双向更新/插入。改变如下:
public function addParent($parent)
{
$this->parents[] = $parent;
$parent->addChild($this); // Add the relation in the proper way
}
这应该可以正常工作!
问候!