2012-03-29 4 views
6

Doctrine 2에서 다 대다 쿼리를 수행하는 방법을 알아 내려고하고 있는데 답변을 찾지 못하는 것 같습니다. 나는 정확히 어떻게 SQL을 똑바로 처리 할 것인지를 잘 알고 있습니다.Doctrine 2의 다 대다 쿼리

 SELECT ma.id, 
      ma.name 
     FROM user u 
     JOIN user_media_area uma ON uma.user_id = u.id 
     JOIN media_area ma ON uma.media_area_id = ma.id 

Doctrine을 사용하면 어떻게됩니까?

+2

왜이 질문은 다운 되었습니까? –

답변

5

매뉴얼은 좋은 사례가 당신은 당신의 엔티티 코드를 게시되지 않은

// Build query 
    $em = $this->getEntityManager(); 
    $qb = $em->createQueryBuilder(); 

    $qb->addSelect('user'); 
    $qb->addSelect('mediaArea'); 

    $qb->from('SomeBundle:User','user'); 

    $qb->leftJoin('user.userMediaArea','userMediaArea'); 
    $qb->leftJoin('userMediaArea.mediaArea','mediaArea'); 

    $query = $qb->getQuery(); 
    $users = $query->getResult(); 
    echo $users[0]->getUserMediaArea()->getName(); 

을 그래서 당신이 정의하는 방법에 대한 추측 일부를해야했다 관계. User와 MediaArea 사이에 단순한 ManyToMany가 있으면 UserMediaArea 조인을 건너 뛸 수 있습니다. D2가 알아낼 것입니다. 그리고 실제로 MediaArea 정보 만 원하기 때문에 MediaArea 정보를 반환하고 사용자 정보가 반환 될 필요가 없도록 MediaArea에서 선택을 수행합니다. 하지만 원래 쿼리를 수행하려고했습니다.

+0

감사! 그게 효과가 있었어. (원래의 코드를 다소 편집했으나,이 주석의 시점에서 편집은 아직 peer review되지 않았습니다.) 특히 제 질문을 실제로 이해하고 답안에서 엔티티 이름을 사용하여 주셔서 감사합니다. –

+0

@Cerad는 네이티브 SQL에서 결과 집합 매핑을 사용하여이 작업을 수행하는 방법을 알고 있습니다. – hardik

+0

슬프게도 아니오. SQL 성능상의 이유로 sql을 사용해야했던 몇 가지 경우에서 직접 매핑을 수행합니다. – Cerad

-1
SELECT ma.id, ma.name 
FROM User u 
JOIN u.media 

사용자는 User 엔터티이고 u.media는 Media 엔터티입니다. 이 같은 보일 것이다 귀하의 경우에는 http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/query-builder.html

:

+1

답장을 보내 주셔서 감사합니다. 그것의 PHP 부분은 어떻습니까? 어떻게 될까요? –

+0

$ sql = 'SELECT ma.id, ma.name FROM User u JOIN u.media'; \t $ result = $ entityManager-> createQuery ($ sql) -> getResult(); –

+0

나는 이것을 시도하지 않았다. 면밀한 검사를 통해 DQL은 내 조인 테이블을 참조하지 않습니다. 당신 엄마가 어디에서 왔을까요? 또한 '미디어'라는 것이 없습니다. 내 질문을 읽거나 답을 너무 조심스럽게 고쳤는지 확신 할 수 없습니다. –

관련 문제