1

我对 MySQL 和 Doctrine 有点陌生,

我基本上有两张桌子UserRole就像这样

+--------------------------------------+--------------------+
|User                                  |   Role             |
|id    username    password    role    |   id    name       |
|1     testuser    something   1       |   1     ROLE_USER  |
+--------------------------------------+--------------------+

我按照 Symfony 网站上的教程进行操作,但我真的不知道如何name从用户实体中的角色获取。

目前它是这样写的:

角色实体

用户实体片段

老实说,我不知道它是否正确加入,任何帮助都会很棒

4

2 回答 2

1

您必须阅读学说文档。有OneToMany关系映射的描述。

所以角色实体应该只包含$id$name字段映射,但用户实体$role字段应该看起来像

/**
 * @ManyToOne(targetEntity="Role")
 * @JoinColumn(name="role", referencedColumnName="id")
 **/
private $role;
于 2012-12-06T07:04:20.743 回答
1

除了我使用多对多关系外,我对用户和角色有类似的设置。毕竟,我认为大多数应用程序都希望能够为用户分配多个角色。

需要像下面这样设置关联。当然,您需要创建适当的 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());
于 2012-12-06T12:26:44.163 回答