2016-08-31 4 views
0

엔티티가 있습니다. Tag, UserService입니다. TagUserService 모두 다 대다 관계를 가지고있다. 쿼리 빌더와Doctrine Mysql : 쿼리 빌더에서 다중 조인

class Service{ 
     /** 
     * @ORM\ManyToMany(targetEntity="Tag", mappedBy="serviceList") 
     */ 
     private $tagList; 
} 

class User{ 
     /** 
     * @ORM\ManyToMany(targetEntity="Tag", mappedBy="userList") 
     */ 
     private $tagList; 
} 

class Tag{ 
     /** 
     * @ORM\ManyToMany(targetEntity="User", inversedBy="tagList") 
     * @ORM\JoinTable(name="tags_users") 
     */ 
     private $userList; 

     /** 
     * @ORM\ManyToMany(targetEntity="Service", inversedBy="tagList") 
     * @ORM\JoinTable(name="tags_services") 
     */ 
     private $serviceList; 
} 

나는이 내가 작성한 쿼리입니다

사용자와 관련된 주어진 User, 즉 서비스와 최소 1 공통 태그가 모든 서비스를 반환 할 수 있지만하지 않는 얼마나

[Syntax Error] line 0, col 104: Error: Expected Literal, got "JOIN" (500 Internal Server Error) 

답변

3

당신을 :

$query = $em->getRepository('AppBundle:Service') 
     ->createQueryBuilder('service') 
     ->join('service.tagList', 'serviceTag') 
     ->join('AppBundle:BasicUser', 'user') 
     ->join('user.tagList', 'userTag') 
     ->where('user.id = :id') 
     ->andWhere('serviceTag.id = userTag.id') 
     ->setParameter('id', $user->getId()) 
    ; 

오류를 작동 쿼리가 잘못되었습니다. 내가 가장 쉬운 해결책이 될 것이라고 생각 :

$query = $em->getRepository('AppBundle:Service') 
      ->createQueryBuilder('service') 
      ->innerJoin('service.tagList', 'tag') 
      ->andWhere(':user MEMBER OF tag.userList') 
      ->setParameter('user',$user) 
      ; 
+0

좋은 솔루션 인 innerJoin 태그 PLZ ABOT 일부 explinatio을 – ahmedbhs