如何访问其他用户的数据?

时间:2016-04-07 12:58:50

标签: php mysql symfony doctrine-orm fosuserbundle

我正在使用一个使用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,管理员应该能够对其他用户数据执行查询?

1 个答案:

答案 0 :(得分:1)

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

一段第三方代码将SQLFilter添加为UserAware注释。 This webpage详细描述了已完成的工作及其工作原理。

也许这可以帮助别人避免这种"问题"并弄清楚什么是"错误" : - )

关于问题1:即使在解决问题2之后,问题1仍然是相同的。 userId仍在查询中翻译为?。但是,这似乎并没有影响代码的功能。据我所知,一切都按预期工作。