QueryBuilder 또는 DQL을 사용하는 동안 문제가 있습니다.Symfony2/Doctrine SQL에서 JOIN 사용
나는 다음과 같은 관계가 있습니다
사용자가 < -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();
누군가가 도와 줄 수 있습니까 ???
업데이트 : 젤코의 솔루션을 시도하고이 스크립트를 만든 :
return $this->getEntityManager()
->createQueryBuilder()
->select('u, r')
->from('CRMCoreBundle:User', 'u')
->innerJoin('u.profiles','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') "to"-> select ('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.
업데이트에 응답하려면 u 및 r을 선택할 수 없습니다. r로가는 길에있는 모든 항목도 선택해야합니다. 그래서 당신은 select ('u, p, rg, r')가 필요합니다. – intrepion