2012-11-14 3 views
3

에 대한 Doctrine2에 가입 나는 다음과 같은 작업 MySQL의 쿼리가 : 오른쪽 Symfony2

SELECT * 
FROM bogenantworten a 
    RIGHT JOIN 
     bogenfragen f ON f.id = a.bogenfragen_id 
     AND a.personen_id = 3, 
    BogenTyp t, 
    BogenFragenGruppe g 
WHERE 
    t.id = f.fragentyp_id AND 
    g.id = f.fragengruppen_id AND 
    t.id = 1 
ORDER BY f.sortierung ASC 

가 지금은 Doctrine2 DQL 또는 QueryBuilder이 필요합니다. 나는 D2가 나를 사물에서 생각하도록 강요하고 있다는 것을 이미 알았지 만, 나는이 일을하기 위해 나의 실재물에 어떻게 태그를 붙일 수 있는지에 대한 조언을 찾을 수 없었다.

위의 MySQL 쿼리를 Symfony2 앱에서 사용하거나 일부 엔티티에 주석을 달아서 BogenAntworten과 BogenFragen 사이의 연결에 올바르게 참여하도록하고 싶습니다. (3과 1은 매개 변수입니다. , 그냥 네가 알기 때문에). 이미 모든 엔티티에 OneToMany 및 ManyToOne 주석을 설정했지만 오른쪽/왼쪽 조인 작업을 수행 할 수있는 항목이 필요합니다.

내 개체의 디자인을 도와하려면 :

나는이 사람 (표 사람) (표 BogenAntworten) 질문 (테이블 BogenFragen)를 응답, 나는 질문의 목록을 표시 할 때 내가 얻을 중 그 질문에서 마지막으로 대답 (저장시 UPDATE가 필요함) 또는 아무 것도없고 저장 (INSERT)을해야한다. 질문은 여러 유형 (테이블 BogenTyp) 중 하나이며 많은 그룹 (테이블 BogenFragenGruppe) 중 하나에 있습니다.

어떤 아이디어입니까?

답변

3

좋아, 다시 찾았습니다. Doctrine2의 QueryBuilder는 leftJoin을 지원합니다 (두 테이블을 전환하면 RIGHT JOIN과 동일합니다). (매개 변수는 실제로 동적하지만 쉽게 읽을 나는 원래 SQL 구문의 숫자 사용)

+7

그것은 것을

$query = $em->createQueryBuilder() ->select(array('f.id', 'f.frage', 'f.sortierung', 'a.antwort', 'g.name')) ->from('MySuperBundle:BogenFragen', 'f') ->leftJoin('f.bogenantworten', 'a', 'WITH', 'a.personen = :pid') ->from('MySuperBundle:BogenTyp', 't') ->from('MySuperBundle:BogenFragenGruppe', 'g') ->where('t.id = :tid') ->andWhere('t.id = f.bogentypen') ->andWhere('g.id = f.bogenfragengruppe') ->orderBy('f.sortierung', 'ASC') ->setParameter('tid', 1) ->setParameter('pid', 3) ->getQuery(); 

: 그 몇 가지 코드가 필요 들어, 다음은 위의 SQL 문이 QueryBuilder 빌드입니다 테이블과 필드 이름이 모두 적절한 영어 인 경우 다른 사람이 코드를 읽는 것이 훨씬 쉽습니다. – tom10271