Symfony2联接表以从另一个表获取列

Symfony2联接表以从另一个表获取列,symfony,doctrine-orm,Symfony,Doctrine Orm,我对MySQL和学说有些陌生 我基本上有两个表User和Role,它们是这样的 +--------------------------------------+--------------------+ |User | Role | |id username password role | id name | |1 testuser somet

我对MySQL和学说有些陌生

我基本上有两个表
User
Role
,它们是这样的

+--------------------------------------+--------------------+
|User                                  |   Role             |
|id    username    password    role    |   id    name       |
|1     testuser    something   1       |   1     ROLE_USER  |
+--------------------------------------+--------------------+
我在Symfony的网站上学习了教程,但我真的不知道如何从用户实体中的角色获取
名称

目前是这样写的:


老实说,我不知道它是否正确地连接了它,任何帮助都将非常棒

您必须阅读条令文档。还有关系映射

所以角色实体应该只包含
$id
$name
字段映射,但用户实体
$Role
字段应该如下所示

/**
 * @ManyToOne(targetEntity="Role")
 * @JoinColumn(name="role", referencedColumnName="id")
 **/
private $role;

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

关联需要按如下所示进行设置。当然,您需要创建适当的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());

美元角色实际上变成了什么?因为我现在得到了这个错误“$roles必须是字符串数组,或者RoleInterface实例,但是得到了object.”$roles是object角色的实例吗?编辑:好的,我知道它确实返回了一个对象,谢谢你的帮助,并为我指出了正确的方向!