我正在使用一个使用FOSUserBundle的Symfony 2.7 webapp。到目前为止一切正常。我不想添加管理员后端,以便显示有关不同用户的详细信息。
例如,在电话簿应用中,应该能够看到所选用户创建了多少联系人:
$contact_count = $this->contactsCountForUser(5);
...
public function contactsCountForUser($user_id) {
$repo = $this->em->getRepository('AppBundle:Contact');
$qb = $repo->createQueryBuilder('c');
$qb->select('COUNT(c)');
$qb->where('c.user = :userId');
$qb->setParameter('userId', $user_id);
$sql = $qb->getQuery()->getSql();
$count = $qb->getQuery()->getSingleScalarResult();
return $count;
}
此操作失败,因为以下内容创建为SQL查询:
SELECT COUNT(c0_.guid) AS sclr0 FROM contact c0_ WHERE (c0_.user_id = ?) AND (c0_.user_id = '1')
问题1:
为什么$qb->where('c.user = :userId')
被翻译为c0_.user_id = ?
?为什么不将5个用作user_id?
问题2:
AND (c0_.user_id = '1')
会自动添加到查询中。我假设这是由FOSUserBundle完成的,它将查询限制为当前用户。 ID 1是当前登录用户的ID,即管理员...显然(c0_.user_id = ?) AND (c0_.user_id = '1')
永远不会是真的。
那么:我如何说服Doctrine和/或FOSUserBundle,管理员应该能够对其他用户数据执行查询?
答案 0 :(得分:1)
感谢@LBA的评论,我找到了问题的根源:
一段第三方代码将SQLFilter添加为UserAware
注释。 This webpage详细描述了已完成的工作及其工作原理。
也许这可以帮助别人避免这种"问题"并弄清楚什么是"错误" : - )
关于问题1:即使在解决问题2之后,问题1仍然是相同的。 userId仍在查询中翻译为?
。但是,这似乎并没有影响代码的功能。据我所知,一切都按预期工作。