Symfony2 ManytoMany与nullable true的关系

时间:2015-07-29 09:08:35

标签: symfony doctrine

我想在Ordo_soins_perfusion和Ordo_soins_medicament实体之间使用可选的ManyToMany关系。

  class Ordo_soins_perfusion
  {

 /**
 * @ORM\ManyToMany(targetEntity="Ordo_soins_medicament",cascade={"persist"})
  *@ORM\JoinTable(name="ordo_soinperf_soinmedoc",
 *      joinColumns={@ORM\JoinColumn(name="Ordo_soins_perfusion_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="Ordo_soins_medicament_id", referencedColumnName="id",nullable=true)})
 */
private $medoc;

    class Ordo_soins_medicament
    {
    /**
 * @var string
 *
 * @ORM\Column(name="medicament", type="string", length=255,nullable=true)
 */
private $medicament;

/**
 * @var string
 *
 * @ORM\Column(name="quantite", type="string", length=50,nullable=true)
 */
private $quantite;

现在,当我在不填写Ordo_soins_medicament表单的情况下保存新的Ordo_soins_perfusion对象时,我发现在连接表和Ordo_soins_medicament表中创建了一个新的ligne。

仅在不为null时添加Ordo_soins_medicament对象

谢谢

1 个答案:

答案 0 :(得分:0)

首先确保ManyToMany关系正确无误。然后在这些属性上初始化一个空的new ArrayCollection(),这样就可以通过Doctrine添加关系。

public function __construct()
{
    $this->medoc = new ArrayCollection();
}

下一步是通过添加getter / setter来确保正确设置关系。如果是收藏品,您还可以使用add

public function addMedoc($item)
{
    $item->setPerfusion($this);
    $this->medoc->add($item);
}

当您持久并刷新新实体时,Doctrine将处理关系/连接表。