【发布时间】: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