php – 在Symfony2 / Doctrine SQL中使用JOIN
发布时间:2020-12-13 14:06:35 所属栏目:PHP教程 来源:网络整理
导读:尝试使用QueryBuilder或DQL时出现问题. 我有以下关系: 用户 -1:n-个人资料 -n:m- RouteGroup -1:n-路线 我想制作一个列出特定用户可以访问的所有路由的DQL. 我可以使用以下代码获取此信息: $usr = $this-container-get('security.context')-getToken()-
尝试使用QueryBuilder或DQL时出现问题.
我有以下关系: 用户< -1:n->个人资料< -n:m-> RouteGroup< -1:n->路线 我想制作一个列出特定用户可以访问的所有路由的DQL. $usr = $this->container->get('security.context')->getToken()->getUser(); foreach ($usr->getProfiles() as $profile){ foreach ($profile->getRoutegroups() as $routegroup){ var_dump($routegroup->getRoutes()->toArray()); } } 显而易见,我不能使用这个代码,否则我将超载我的服务器,LOL. 我尝试了以下方法: DQL: $em->createQuery('SELECT p FROM CRMCoreBundle:User u JOIN CRMCoreBundle:Profile p JOIN CRMCoreBundle:RoleGroup rg JOIN CRMCoreBundle:Role r WHERE u.id=:user') ->setParameter('user',$user->getId()) ->getResult(); QueryBuilder(我尝试使用u.profiles – 关系的名称而不是实体 – 但是这样也没有): $em->createQueryBuilder() ->select('r') ->from('CRMCoreBundle:User','u') ->innerJoin('u.profiles','p') ->where('u.id = :user_id') ->setParameter('user_id',$user->getId()) ->getQuery() ->getResult(); 有人可以帮忙吗? 更新:我尝试了Zeljko的解决方案,并制作了这个脚本: return $this->getEntityManager() ->createQueryBuilder() ->select('u,r') ->from('CRMCoreBundle:User','p') ->innerJoin('p.routegroups','rg') ->innerJoin('rg.routes','r') ->where('u.id = :user_id')->setParameter('user_id',$user->getId()) ->getQuery() ->getResult(); 但是我收到这个错误: The parent object of entity result with alias 'r' was not found. The parent alias is 'rg'. 如果我更改“ – >选择(‘u,r’)”到“ – >选择(‘r’)”我得到这个: [Semantical Error] line 0,col -1 near 'SELECT r FROM': Error: Cannot select entity through identification variables without choosing at least one root entity alias.
在尝试了一些替代方案后,我发现我可以进行反向查找,从路由到用户.解决方案如下:
return $this->getEntityManager() ->createQueryBuilder() ->select('r') ->from('CRMCoreBundle:Route','r') ->innerJoin('r.routegroup','rg') ->innerJoin('rg.profiles','p') ->innerJoin('p.users','u') ->where('u.id = :user_id') ->setParameter('user_id',$user->getId()) ->getQuery() ->getResult(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |