从Doctrine2中的集合中删除元素

时间:2016-01-02 04:48:31

标签: php symfony doctrine-orm doctrine

我有一个与Command有n:m关系的Alias实体。这是Command类的一段代码:

class Command
{

    ...

    /**
     * @ORM\ManyToMany(targetEntity="Alias", inversedBy="alias_command", cascade={"persist", "remove"})
     * @ORM\JoinTable(name="command_has_alias",
     *      joinColumns={@ORM\JoinColumn(name="command_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="alias_id", referencedColumnName="id")}
     * )
     */
    protected $command_alias;

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

    ...

    /**
     * Add alias to command.
     * @param Alias $alias
     */
    public function addCommandAlias(Alias $alias)
    {
        $this->command_alias[] = $alias;
    }

    /**
     * Get alias from command.
     * @return Doctrine\Common\Collections\Collection
     */
    public function getCommandAlias()
    {
        return $this->command_alias;
    }

    /**
     * Remove alias from command.
     * @param Alias $alias
     */
    public function removeCommandAlias(Alias $alias)
    {
        $this->command_alias->removeElement($alias);
        return $this;
    }
}

我想从集合中删除一个元素(n:m中间表中的关联),但我拥有的是Alias的ID。我阅读了Removing associations周围的Doctrine文档,但我不清楚如何从集合中删除元素。我不知道按键移除是否是在此处遵循的路径,或者如果我可以在我的实体中执行某些操作以使此操作变得简单,我将不会删除CommandAlias我只是想删除它们之间的关系。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

这应该是非常困难的。如果您只需删除别名和命令之间的关系,同时具有别名ID,请将以下方法添加到Command:

public function removeAliasById($aliasId)
{
    foreach ($this->command_alias as $alias) {
        if ($alias->getId() == $aliasId) {
            $this->command_alias->removeElement($alias);
            return;
        }
    }
}

如果你有,那么从id中删除命令的别名是:

$command->removeAliasById($aliasId);
$entityManager->persist($command);
$entityManager->flush();