Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Symfony2: How to remove an element from a Doctrine ArrayCollection (many-to-many relation)?

I use the following code for my many-to-many relation in symfony2 (doctrine)

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();

Now, how can I use this to remove a relation? Do I need to add a method to my entity like removeSyncSchema()? What would that look like?

like image 950
Matt Welander Avatar asked Feb 24 '14 18:02

Matt Welander


1 Answers

You're looking for the ArrayCollection::removeElement method here.

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

    return $this;
}

tip:

You can use ArrayCollection::add to add elements to an existing collection. OOP.

In some cases you may also want to check wether already contains the element before adding it.

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

    return $this;
}
like image 145
Nicolai Fröhlich Avatar answered Oct 10 '22 19:10

Nicolai Fröhlich