Doctrine2 - 如何在添加新关联时删除 ManyToMany 关联
Doctrine2 - How to remove ManyToMany associations on add of new ones
我快速浏览了一下,但找不到答案。
采用以下实体,可以具有多个角色的用户:
/**
* @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();
但是,这会不断向我的关系添加新角色 table,而我只想更新当前行,或删除它并创建一个新角色(以更容易的为准)。我怎样才能做到这一点?
尝试将此功能添加到您的实体中:
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();
我快速浏览了一下,但找不到答案。
采用以下实体,可以具有多个角色的用户:
/**
* @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();
但是,这会不断向我的关系添加新角色 table,而我只想更新当前行,或删除它并创建一个新角色(以更容易的为准)。我怎样才能做到这一点?
尝试将此功能添加到您的实体中:
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();