2012-11-03 3 views
1

many-to-many 관계가있는 ImageTags의 두 엔터티가 있습니다. code, description, author과 다 대다 관계를 구현 tags :관련 엔터티 필드에 대한 where 절이있는 Doctrine 쿼리 buider

Image 일부 필드가 있습니다.

Tag에는 nameimages의 두 필드 만 있습니다.

난 당신이 텍스트를 쓴 후 그것의 code, description 또는 author 필드에 텍스트를 가지고, 또는 어떤 어떤 Image을 반환됩니다 단지 입력 필드와 매우 일반 검색 양식을 짓고 있어요 해당 태그 name 필드.

비 관계 필드의 경우 쉽습니다.

$em = $this->getDoctrine()->getManager(); 

$qb = $em->getRepository('MyBundle:Image')->createQueryBuilder('i'); 

$qb 
->where(
     $qb->expr()->like('i.code', $qb->expr()->literal('%'.$request->get('query').'%')) 
    ) 
->orWhere(
     $qb->expr()->like('i.description', $qb->expr()->literal('%'.$request->get('query').'%')) 
    ) 
->orWhere(
     $qb->expr()->like('i.author', $qb->expr()->literal('%'.$request->get('query').'%')) 
    ); 

지금, 나는 tags의 각 name 필드에 진행하는 방법을 모른다 : 나는 (query 검색에 사용되는 바로 드 GET 매개 변수입니다) 내 컨트롤러에 있습니다.

모든 태그를 문자열로 반환 한 Image 엔티티의 가상 필드를 사용하려고했으나 나중에 쿼리 작성기에서 사용할 수 없습니다.

고맙습니다.

답변

2

이렇게하면됩니다. QB와

:

$qb->leftJoin('i.tags', 't') 
    ->where($qb->expr()->like('t.name', $qb->expr()->literal('%' . $query . '%'))); 
+0

1. 귀하의 답변에 감사드립니다. 그런 식으로 작동합니다. 하지만 DQL 대신 쿼리 빌더를 사용하도록하겠습니다. 좋은 ORM이 객체 지향 방식으로 작업하도록 장려해야한다고 생각합니다. 아무도 다른 쿼리 빌더를 제안하지 않으면 귀하의 답변을 올바른 것으로 설정합니다. –

+0

문제가 있습니다. 그런 식으로 태그가없는 이미지는 검색 할 때 고려되지 않습니다. –

+1

다음 LEFT JOIN이어야합니다. – nikita2206