【问题标题】:Doctrine2 - How to remove ManyToMany associations on add of new onesDoctrine2 - 如何在添加新关联时删除多对多关联
【发布时间】:2017-10-24 08:22:25
【问题描述】:

我快速浏览了一下,但找不到答案。

采取以下实体,用户可以有多种角色:

/**
* @Entity
**/

class User 
{

    /**
    * @ManyToMany(targetEntity="Role", inversedBy="users")
    * @JoinTable(name="user_to_roles")
    **/ 
    protected $roles;

    public function __construct()
    {
        $this->roles = new \Doctrine\Common\Collections\ArrayCollection();
    }

    public function addRole(Role $role)
    {
        $role->addUser($this);
        $this->roles[] = $role;
    }

    public function getRoles()
    {
        return $this->roles;
    }
}

和角色:

/**
* @Entity
**/

class Role
{
    /**
    * @Id
    * @Column(type="integer")
    * @GeneratedValue(strategy="AUTO")
    **/
    protected $id;

    /**
    * @ManyToMany(targetEntity="User", mappedBy="roles")
    **/
    protected $users;

    public function __construct()
    {
        $this->users = new \Doctrine\Common\Collections\ArrayCollection();
    }

    public function addUser(User $user)
    {
        $this->users[] = $user;
    }

    public function getUsers()
    {
        return $this->users;
    }
}

当我想更新用户时,我会得到参考,并像这样更新:

$user = $this>entityManager->getReference('App\Entity\User', $id);
$user->addRole($role);
$this->entityManager->persist($user);
$this->entityManager->flush();

但是,这将不断向我的关系表中添加新角色,而我只想更新当前行,或者删除它并创建一个新行(以更容易者为准)。我怎样才能做到这一点?

【问题讨论】:

    标签: doctrine-orm entity entitymanager


    【解决方案1】:

    尝试将此功能添加到您的实体:

    function setRoles($roles) {
      $this->roles = new ArrayCollection($roles);
    }
    

    当你更新时试试这个:

    $user = $this>entityManager->getReference('App\Entity\User', $id);
    $roles = array();
    
    // add your roles to the array roles
    
    $user->setRoles($roles);    
    $this->entityManager->persist($user);
    $this->entityManager->flush();
    

    【讨论】:

    • 很高兴为您提供帮助! @RyanHipkiss
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 2014-05-07
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多