Symfony Doctrine:删除ManyToMany关联

时间:2016-08-15 12:29:19

标签: symfony doctrine-orm

我有2个具有多对多关系的人:用户和标签。

class User{
   /**
    * @ORM\ManyToMany(targetEntity="Tag", mappedBy="userList")
    */
    private $tagList;
}

class Tag{
   /**
    * @ORM\ManyToMany(targetEntity="User", inversedBy="tagList")
    * @ORM\JoinTable(name="tags_users")
    */
    private $userList;
}

问题

当我清除用户的tagList时,我还想从删除的代码userList中移除用户。

  $user->getTagList()->clear();

但是在JoinTable tags_users中,我仍然可以看到标记用户关联

1 个答案:

答案 0 :(得分:1)

我认为您正在尝试进行拥有和反向关联,但只更新一方。

查看文档@ http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#owning-and-inverse-side-on-a-manytomany-association

你也应该打电话给

$tag->removeUser($user);

您可以向用户实体添加一个功能以清除标记

class User
{
    function clearTaglist()
    {
        foreach ($this->tagList as $tag) {
            $tag->removeUser($this);
        }

        $this->tagList->clear();
    }
}

class Tag {
    public function removeUser($user) 
    {
        $this->userList->removeElement($user);
    }
}

干杯