如何访问其他用户的数据


How to access data of other user?

我正在开发一款使用FOSUserBundle的Symfony 2.7网络应用程序。到目前为止一切都很好。不是,我想添加一个管理员后端,允许显示不同用户的详细信息。

例如,在电话簿应用程序中,上应该能够看到所选用户创建了多少联系人:

$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 beeing作为user_id?

问题2:AND (c0_.user_id = '1')会自动添加到查询中。我认为这是由FOSUserBundle完成的,它将查询限制为当前用户。这里ID 1是当前登录用户的ID,即Admin。。。显然(c0_.user_id = ?) AND (c0_.user_id = '1')永远不可能是真的。

那么:我如何说服Doctrine和/或FOSUserBundle,管理员应该能够对其他用户的数据执行查询

感谢@LBA的评论,我找到了问题的根源:

一段第三方代码添加了一个SQLFilter作为UserAware注释。此网页详细描述了所做的操作及其工作方式。

也许这可以帮助其他人避免这种"问题",并找出什么是"错误的":-)

关于问题1:即使解决了问题2,问题1仍然是一样的。在查询中,userId仍然被转换为?。然而,这似乎不会影响代码的功能。据我所知,一切都在按预期进行。