我有一个 User 实体和一个 HistoryAccess 实体,它们绑定两个 User 实例,如下所示:其中指定为“允许”的用户可以获取指定为“所有者”的用户。
我正在尝试进行一个查询,该查询将接收当前用户可用的所有用户的数据。查询码:
$user = $security->getUser();
$userId = $user->getId()->toRfc4122();
return $entityManager->createQueryBuilder()
->from('App\Entity\User', 'u')
->join('u.ownerHistoryAccesses', 'ha')
->join('ha.allowed', 'a')
->where('a.id = :currentUserId')
->setParameter('currentUserId', $userId)
->select('u, ha, a.id')
->getQuery()
->getArrayResult();
但是这个查询没有返回任何内容
如果我删除 andWhere 和 setParameter 行,结果是预期的数据集,其中 a.id 与 $userId 值具有相同的标识符。为什么使用 andWhere 和 setParameter 的请求没有返回任何内容?
从您的描述来看,您似乎想要根据 HistoryAccess 实体检索当前用户可以访问的用户列表,其中当前用户是“允许”用户,“所有者”用户是您想要的用户检索。为了实现这一点,您可以使用不同的方法。您可以获取当前用户的 HistoryAccess 实体,然后从这些 HistoryAccess 实体中提取“所有者”用户。
这是一个修改后的查询来实现这一点:
$user = $security->getUser();
$userId = $user->getId()->toRfc4122();
return $entityManager->createQueryBuilder()
->select('u')
->from('App\Entity\User', 'u')
->leftJoin('u.ownerHistoryAccesses', 'ha')
->leftJoin('ha.allowed', 'a')
->where('a.id = :currentUserId')
->setParameter('currentUserId', $userId)
->getQuery()
->getResult();
在此查询中: