在基于 symfony 4 框架构建的应用程序中,我在用户存储库中使用查询来查找具有特定角色的用户,如下所示:
public function findByRole($role)
{
$qb = $this->_em->createQueryBuilder();
$qb->select('u')
->from($this->_entityName, 'u')
->where('u.roles LIKE :roles')
->setParameter('roles', '%"'.$role.'"%');
return $qb->getQuery()->getResult();
}
现在这个查询通常运行良好,但是每当我将它与 pagerfanta 结合使用时,我都会遇到问题。例如,每当我在控制器中使用以下内容时:
$em = $this->getDoctrine()->getManager();
$query = $em->getRepository(User::class)->findByRole('ROLE_ADMIN');
$pagerfanta = $this->paginate($request, $query);
我收到错误:“调用数组上的成员函数 setFirstResult()”。
为了解决这个问题,我使用:
$em = $this->getDoctrine()->getManager();
$query = $em->getRepository(User::class)->createQueryBuilder('u')
->andWhere( 'u.roles LIKE :role')
->setParameter('role', '%"ROLE_ADMIN"%');
$pagerfanta = $this->paginate($request, $query);
这适用于 pagerfanta,没有任何问题。我只是不明白第一个查询有什么问题(只要我不使用 pagerfanta,它就可以工作)。有任何想法吗?