2016-06-24 2 views
1

Continent이라는 엔티티가 있습니다. 대륙에는 국가가 있습니다 :Doctrine Query Builder IN이 작동하지 않습니다.

/** 
* @ManyToMany(targetEntity="Country") 
* @JoinTable(name="cont_countries", 
*  joinColumns={@JoinColumn(name="cont_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@JoinColumn(name="country_id", referencedColumnName="id", unique=true)} 
*  ) 
* @var Country[] 
**/ 
private $countries; 

어떤 대륙이 한 국가에 속하는지 알고 싶습니다.

$qb->andWhere(':country IN (t.countries)') 
->setParameter('country', $country) 
// possibly more conditions after that 

그러나 어떤 이유로

, 나는 때문에

+0

values''그것'field'이 아닌 필드의 값이 :-) – Rufinus

답변

2

당신은 통과하는 데 필요한 IN 문의 Uncaught exception를 얻을 :이 시도했습니다

(예를 들어 러시아도 유럽, 아시아에 속한다) in 함수에 대한 국가 ID의 배열.

이 시도 : 대신

$qb->andWhere('t.countries IN (:country)') 
->setParameter('country', $country) 

:

$qb->andWhere(':country IN (t.countries)') 
    ->setParameter('country', 
          // Extract id from a collections 
          array_map('current', $country) 
         ); 

희망이 도움이

+0

그것은 아직하지 –

+0

안녕하세요 @IterAtor'$ country'에 무엇이 들어 있습니까? '$ country'는 id 배열이어야합니다. – Matteo

+0

국가 인스턴스의 배열 –

관련 문제