我有一个用户实体和角色实体。用户可以拥有多个角色,角色可以拥有许多用户。 (我认为)重要的部分如下:
在User.php中
/**
* @ORM\ManyToMany(targetEntity="Role",inversedBy="users")
* @ORM\JoinTable(name="user_role",
* joinColumns={@ORM\JoinColumn(name="userid", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="roleid", referencedColumnName="id")}
* )
*/
protected $roles;
public function __construct(){
$this->roles = new ArrayCollection();
}
在Role.php中:
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
* @ORM\JoinTable(name="user_role",
* joinColumns={@ORM\JoinColumn(name="roleid", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="userid", referencedColumnName="id")}
* )
*/
protected $users;
public function __construct(){
$this->users = new ArrayCollection();
}
尝试以下查询为我提供了一个用户,可以将其ID和名称字段替换为角色ID和名称
$result = $this->getEntityManager()->createQuery('SELECT
u.id, u.username, u.name, u.email, r.id, r.name
FROM mytestBundle:User u
LEFT JOIN u.roles r
WHERE u.id = :id')
->setParameter('id', $id)
->getArrayResult();
以下内容给出了一个错误:Error: Cannot select entity through identification variables without choosing at least one root entity alias.
$result = $this->getEntityManager()->createQuery('SELECT
u.id, u.name, r
//... rest is same
以下为我提供了我期望的结果,但包含太多用户字段。观看另一个用户的个人资料的一个用户无法看到用户的电子邮件,密码,盐,......但是可以看到该用户的角色:
$result = $this->getEntityManager()->createQuery('SELECT
u, r
所以问题是:如何只选择某些用户字段并在用户记录中使用doctrine nest Roles而不会抛出错误?
答案 0 :(得分:0)
发布得太早,抱歉。
这个错误很常见,许多SO答案不适用于我的情况,但this one确实如此。
使用部分解决了我的问题:
$result = $this->getEntityManager()->createQuery('SELECT
partial u.{id, name}, r