【发布时间】:2014-09-19 00:13:10
【问题描述】:
我在用户表和角色表之间存在多对多关系。用户表是拥有方。我的问题是,当我将数据持久化到 User 表中时,“user_role”表(即关系的帮助表)不会更新。
AccountController.php:
$user = $registration->getUser(); // all the user data works
$em->persist($user);
$em->flush();
用户.php:
/**
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users")
* @ORM\JoinTable(name="user_role",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")}
* )
*
*/
private $roles;
public function __construct()
{
$this->roles = new ArrayCollection();
}
// trying to assign this role by default
public function getRoles()
{
return array('ROLE_ADMIN');
}
public function addRole(Role $role) {
$this->roles[] = $role;
$role->addUser($this);
return $this;
}
角色.php:
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
* @ORM\JoinTable(name="user_role",
* joinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
* )
*/
private $users;
public function __construct()
{
$this->users = new ArrayCollection();
}
public function getRole()
{
return $this->role;
}
public function setRole($role)
{
$this->role = $role;
}
public function addUser(User $users)
{
$this->users[] = $users;
return $this;
}
public function getUsers()
{
return $this->users->toArray();
}
我意识到我什至没有在控制器中使用 addRole。但为此,我还必须保留角色(否则会出现致命错误),如果我这样做了,那么它将是角色表中的重复条目。
基本上我的问题很简单:如何在更新 user_role 表的同时在数据库中保存新用户,而不添加/复制新角色?
任何帮助将不胜感激。
【问题讨论】:
-
你可以试试
** * @ManyToMany(targetEntity="User", mappedBy="roles") * @JoinTable(name="user_role", * joinColumns={@JoinColumn(name="role_id", referencedColumnName="id")}, * inverseJoinColumns={@JoinColumn(name="user_id", referencedColumnName="id")} * ) */没有ORM 作为学说的文档。 doctrine-orm.readthedocs.org/en/latest/reference/… -
我正在使用:使用 Doctrine\ORM\Mapping 作为 ORM;所以没有 ORM 是行不通的。
标签: php symfony doctrine-orm many-to-many