2014-02-24 5 views
6

Ich verwende den folgenden Code für meine many-to-many-Beziehung in Symfony2 (Lehre)Symfony2: Wie entfernt man ein Element aus einer Doctrine ArrayCollection (Viele-zu-Viele-Beziehung)?

Entity:

/** 
* @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; 
} 

Controller:

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

Nun, wie kann ich dies eine Beziehung entfernen? Muss ich meiner Entity eine Methode wie removeSyncSchema() hinzufügen? Wie würde das aussehen?

+2

Machst du nicht Lehre: Entitäten generieren? –

+0

oh ... normalerweise nicht, aber probier es aus und sicher genug ... danke. –

Antwort

14

Sie suchen die Methode ArrayCollection::removeElement hier.

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

    return $this; 
} 

Tipp:

können Sie ArrayCollection::add verwenden Elemente zu einer bestehenden Sammlung hinzuzufügen. OOP.

In einigen Fällen möchten Sie vielleicht auch prüfen, ob das Element bereits enthalten ist, bevor Sie es hinzufügen.

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

    return $this; 
} 
+1

nette Antwort. +1 für die Überprüfung vor dem Hinzufügen –