我是MySQL和Doctrine的新手,
我基本上有两个表User
和Role
,就像这样
+--------------------------------------+--------------------+
|User | Role |
|id username password role | id name |
|1 testuser something 1 | 1 ROLE_USER |
+--------------------------------------+--------------------+
我按照Symfony网站上的教程进行了操作,但我真的不知道如何从用户实体的角色中获取name
。
目前它是这样编写的:
老实说,我不知道它是否正确加入,任何帮助都会很棒
答案 0 :(得分:1)
您必须阅读学说文档。有description of OneToMany关系映射。
因此,角色实体应仅包含$id
和$name
字段映射,但用户实体$role
字段应如下所示
/**
* @ManyToOne(targetEntity="Role")
* @JoinColumn(name="role", referencedColumnName="id")
**/
private $role;
答案 1 :(得分:0)
除了使用ManyToMany关系之外,我对用户和角色有类似的设置。毕竟,我认为大多数应用程序都希望能够为用户分配多个角色。
需要像下面那样设置关联。当然,您需要创建适当的getter / setter来为用户分配角色。
用户强>
/**
* @ORM\ManyToMany(targetEntity="Role", cascade={"persist"})
* @ORM\JoinTable(name="user_roles",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id", onDelete="CASCADE")}
* )
*/
protected $roles;
public function __construct() {
$this->roles = new ArrayCollection();
}
<强>角色强>
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
*/
protected $users;
public function __construct() {
$this->users = new ArrayCollection();
}
以上将允许您使用以下角色:
$user = $this->getDoctrine()->getRepository('YourBundle:User')->find($id);
print_r($user->getRoles()->toArray());