2013-02-05 2 views
1

비슷한 질문이 있지만 silent join table 문제를 언급하지 못했습니다.SQL을 DQL (Doctrine2)으로 변환하여 테이블을 결합하십시오.

이 조인 테이블로 인해 조인을 사용하는 간단한 SQL 쿼리가 있지만이를 DQL로 변환 할 수 없습니다. ManyToMany 연관에 의해 연결된이라는 두 엔티티 Shop 및 Client가 있습니다.

Doctrine2가 자동으로 조인 테이블을 만들었습니다 : shop_client. 이것은 정직, 정말 쉽게

SELECT c.name FROM `client` AS c 
JOIN `shop_client` AS sc 
    ON sc.client_id = c.id 
    AND sc.shop_id != :shop_id 

을,하지만 난 DQL 가지고 올 수 없습니다 내가 주어진 가게에 속하지 않는 모든 클라이언트를 얻으려면 지금

, 내가 할 simlpy 번역.

"EXISTS", "NOT IN", "SIZE"를 사용하려고했지만 작동하는 DQL 쿼리로 끝날 수는 없습니다.

편집 : 마이 샵 엔티티는 clients 필드를 가지고 있지만 클라이언트 엔티티는 shops 필드가 없습니다.

답변

1
SELECT 
    c 
FROM 
    Client c 
WHERE 
    c.id IN (
     SELECT 
      c2.id 
     FROM 
      Shop s2 
     JOIN 
      s2.clients c2 
     WHERE 
      s2.id != :shopId 
    ) 

또한 엔티티 정의가없는 이러한 쿼리를 작성하는 것이 어두운 곳에서 촬영하는 것과 같습니다. 다음 번에 질문을 게시하십시오.

+0

거의 효과가있었습니다. 나는 "IN IN"을 "NOT IN"으로 변경했고 "! = : shopId"는 "= : shopId"로 변경했습니다. 고맙습니다! 확인 됨 – Ninj

관련 문제