使用Doctrine querybuilder进行棘手的查询

时间:2012-08-18 12:28:15

标签: php sql symfony doctrine

我有一个棘手的查询问题,我使用此代码来提取用户有权访问的容器(访问以多对多关系定义):

    //Fetch the containers
    $repository = $this->getDoctrine()->getRepository('BizTVContainerManagementBundle:Container');
    $query = $repository->createQueryBuilder('c')
        ->innerJoin('c.users','u')
        ->where('c.company = :company')
        ->setParameter('company', $companyId)
        ->orderBy('c.name', 'ASC')
        ->getQuery();
    $containers = $query->getResult();

现在我实际上拥有4级权限的层次结构 - 公司,地理区域,建筑和屏幕。我想设置它,以便当用户拥有父对象的权限时,查询也会返回子对象,而不会在子对象上设置任何特定权限。

如果我可以访问symfony2优秀的实体系统,我可以输入类似

的内容
If $entity->getParent() == granted
OR
$entity->getParent()->getParent() == granted
THEN
this is granted also

但是在SQL中我不能在这样的级别中挖掘,可以吗?

1 个答案:

答案 0 :(得分:0)

您可以在查询中提取完整的层次结构:

$query = $repository->createQueryBuilder('company')
    ->leftJoin('company.parent','geoarea')
    ->leftJoin('geoarea.parent','building')
    ->leftJoin('building.parent','screen')

我不清楚你如何存储你的权限,但在查询中你可以'或'在一起的条件和检查heirarchy中的每个项目。