2014-02-24 92 views
6

我用在Symfony2中(教義)Symfony2:如何從一個Doctrine ArrayCollection(多對多關係)中刪除一個元素?

實體我的許多一對多的關係下面的代碼:

/** 
* @ORM\ManyToMany(targetEntity="BizTV\ContainerManagementBundle\Entity\Container", inversedBy="videosToSync") 
* @ORM\JoinTable(name="syncSchema") 
*/ 
private $syncSchema; 

public function __construct() 
{ 
    $this->syncSchema = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

public function addSyncSchema(\BizTV\ContainerManagementBundle\Entity\Container $syncSchema) 
{ 
    $this->syncSchema[] = $syncSchema; 
} 

控制器:

$entity->addSyncSchema($container); 
$em->flush(); 

現在,我該怎麼用這個來刪除關係?我是否需要將方法添加到像removeSyncSchema()這樣的實體中?那將是什麼樣子?

+2

您是不是在做教條:生成實體? –

+0

哦......通常不要,但試過了,果然......謝謝。 –

回答

14

您正在尋找ArrayCollection::removeElement方法。

public function removeSchema(SchemaInterface $schema) 
{ 
    $this->schemata->removeElement($schema) 

    return $this; 
} 

提示:

您可以使用ArrayCollection::add將元素添加到現有的集合。 OOP。

在某些情況下,您可能還需要檢查在添加元素之前是否已經包含該元素。

public function addSchema(SchemaInterface $schema) 
{ 
    if (!$this->schemata->contains($schema)) { 
     $this->schemata->add($schema); 
    } 

    return $this; 
} 
+1

很好的答案。添加前檢查+1 –