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