Symfony2连接表以从另一个表中获取列

时间:2012-12-06 06:44:09

标签: symfony doctrine-orm

我是MySQL和Doctrine的新手,

我基本上有两个表UserRole,就像这样

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

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

目前它是这样编写的:

Role Entity

User Entity Snippet

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

2 个答案:

答案 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());