我有一个User实体和Role实体。一个用户可以拥有多个角色,一个角色可以拥有多个用户。(我认为)重要的部分如下:
在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
那么问题是:我如何只选择某些用户字段,并在用户记录中拥有原则巢角色而不抛出错误?
发得太早了,抱歉。
这个错误是很常见的,许多SO的答案并不适用于我的情况,但这一个。
使用部分解决了我的问题:
$result = $this->getEntityManager()->createQuery('SELECT
partial u.{id, name}, r