我有一个棘手的查询问题,我使用此代码来提取用户有权访问的容器(访问以多对多关系定义):
//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中我不能在这样的级别中挖掘,可以吗?
答案 0 :(得分:0)
您可以在查询中提取完整的层次结构:
$query = $repository->createQueryBuilder('company')
->leftJoin('company.parent','geoarea')
->leftJoin('geoarea.parent','building')
->leftJoin('building.parent','screen')
我不清楚你如何存储你的权限,但在查询中你可以'或'在一起的条件和检查heirarchy中的每个项目。