簡體   English   中英

主義-Symfony2 |中文 多對多針對同一個實體

[英]Doctrine - Symfony2 | Many to Many targeting the same entity

我正在嘗試創建針對同一實體的多對多外鍵表關系。

我已經成功創建了與其他實體的關系,但是在定位同一實體時遇到了麻煩。

我讀了幾堆棧溢出的問題和答案,看到我在做什么是可能的.. 我根據我的課這個例子 -表unit_relations是空的,當我添加父,但是當我添加一個孩子一個單位工作。 我假設是因為該字段具有inversedBy注釋。

我需要添加什么以允許雙向更新/插入?

我試圖像這樣的答案交換joinColums-什么都沒有...

-

 /**
 * 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 ,並且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();

添加父關系時沒有ID沒關系。

我無法詳細解釋為什么會發生這種情況,但是我認為主要的問題是,在多對多自引用中,具有JoinTable批注的屬性可能是主實體。 您可以說,它“保留”了與該實體的所有其他關系。

您可以在更改函數$unit->addParent($parent)接收雙向更新/插入。 進行如下更改:

  public function addParent($parent)
  {
      $this->parents[] = $parent;
      $parent->addChild($this); // Add the relation in the proper way
  }

那應該很好!

問候!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM