我正在尝试加入两个表格。我的用户表和我的user_role_linker表。
用户表:user_id,名称,电子邮件......等 user_role_linker表:user_id,role_id(来自ZfcUser / BjyAithorize)
我将我的用户列入视图,并希望在视图中包含他们的角色。幸运的是,user_role_linker表使用实际的角色名称作为其ID,因此我只需要进行一次连接。
我被告知要实现这个目标,我需要使用"集合"。我已经阅读了Doctrine Manual中关于集合的所有内容,并且我已经放下了一些代码。然而,我有点不确定如何把它们放在一起。这就是我到目前为止所做的:
<?php
namespace Administration\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\MApping\OneToOne;
use Doctrine\Common\Collections\ArrayCollection;
/** @ORM\Entity */
class User {
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer",name="user_id")
* @OneToOne(targetEntity="UserRole", mappedBy="user_id")
*/
protected $user_id;
/** @ORM\Column(type="integer", name="parent_id") */
protected $parent_id;
/** @ORM\Column(type="string", name="title") */
protected $title;
/** @ORM\Column(type="string", name="name") */
protected $name;
//etc.
//Setters and getters
public function getUserId() {
return $this->user_id;
}
public function setTitle($title) {
$this->title = $title;
}
public function setName($name) {
$this->name = $name;
}
//etc.
//Constructor to setup the collection
/** @OneToOne(targetEntity="UserRole", mappedBy="user_id") **/
private $user_role;
public function __construct()
{
$this->user_role = new ArrayCollection();
}
public function getUserRole()
{
return $this->user_role;
}
}
我的UserRole实体如下所示:
<?php
namespace Administration\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\MApping\OneToOne;
use Doctrine\Common\Collections\ArrayCollection;
/** @ORM\Entity */
class UserRole {
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer",name="user_id")
* @OneToOne(targetEntity="User", mappedBy="user_id"))
*/
protected $user_id;
/** @ORM\Column(type="string", name="role_id") */
protected $role_id;
public function getRoleId() {
return $this->role_id;
}
}
为了抓住用户我有一个从控制器调用的功能,我怀疑我应该在此时设置集合......
public function getUsers()
{
return $this->em->getRepository('Administration\Entity\User')->findAll();
}
根据文档我会做这样的事情:
$user_group = new UserRole();
$user = new User();
$user->getUserRole()->add($user_group);
我现在还不是100%肯定...有人能指点我的一些教程或工作示例吗?
干杯
答案 0 :(得分:0)
我认为你想要的是多对多关联:一个用户可以有多个角色,一个角色可以分配给许多用户。 Doctrine将为您创建联接表。
假设您有Role
实体:
用户实体:
/** @ORM\Entity */
class User {
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer",name="user_id")
*/
protected $user_id;
/** @ORM\Column(type="integer", name="parent_id") */
protected $parent_id;
/** @ORM\Column(type="string", name="title") */
protected $title;
/** @ORM\Column(type="string", name="name") */
protected $name;
// roles association:
/** @ORM\ManyToMany(targetEntity="Role")
protected $roles;
// getters & setters
public function __construct() {
$this->roles = new ArrayCollection();
}
}
您不需要UserRole
表。 Doctrine将创建链接users_roles
和User
实体的Role
表。
然后您将角色添加到用户:
$user = new User();
// $role1 and $role2 are instances of Role entity
$user->getRoles()->add($role1);
$user->getRoles()->add($role2);