我有一个与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文档,但我不清楚如何从集合中删除元素。我不知道按键移除是否是在此处遵循的路径,或者如果我可以在我的实体中执行某些操作以使此操作变得简单,我将不会删除Command
和Alias
我只是想删除它们之间的关系。有什么建议吗?
答案 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();