Symfony2联接表以从另一个表获取列
我对MySQL和学说有些陌生 我基本上有两个表Symfony2联接表以从另一个表获取列,symfony,doctrine-orm,Symfony,Doctrine Orm,我对MySQL和学说有些陌生 我基本上有两个表User和Role,它们是这样的 +--------------------------------------+--------------------+ |User | Role | |id username password role | id name | |1 testuser somet
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角色的实例吗?编辑:好的,我知道它确实返回了一个对象,谢谢你的帮助,并为我指出了正确的方向!