2013-06-17 5 views
0

나는 다음과 같은 DQL 쿼리 있습니다 : 그것은 단지 where 절에서 첫 번째 값과 일치하는 결과를 반환Doctrine DQL 쿼리가 예상 결과를 반환하지 않는 이유는 무엇입니까?

$queries_query = $this->_em->createQuery('SELECT q FROM \Entities\Query q INNER JOIN q.store s WHERE s.tvRegionId IN (?1)'); 
$queries_query->setParameter(1, $tv_region_ids); 

합니다. 변수 $ tv_region_ids에는 쉼표로 구분 된 값이 들어 있습니다. 누군가가 내 문제에 대한 몇 가지 빛을하시기 바랍니다 있나 문자열 변환

에 배열 :

주의 사항 : 내가 배열에 그 변수를 변경하면 나는 다음과 같은 메시지가 나타납니다. 나는 완전히 난감한 처지입니다.

+0

'DQL' 변환? 그것을 들어 보지 못했습니다 : P – Kevin

+0

'$ tv_region_ids '는 어떻게 생겼습니까? – phpisuber01

+0

string (38) "16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1" – Sid

답변

2

IN 형식 쿼리의 경우 DQL에 문자열을 전달할 수 없습니다. 배열을 전달해야합니다. DQL은 준비된 명령문과 매우 유사하게 작동하므로 IN 쿼리는 표현식으로 처리되고 원시 데이터는 setParameter 함수에 제공되어야합니다.

$tv_region_ids = [16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1]; 

$queries_query = $this->_em->createQuery('SELECT q FROM \Entities\Query q INNER JOIN q.store s WHERE s.tvRegionId IN (?1)'); 
$queries_query->setParameter(1, $tv_region_ids); 

당신의 문자열 (그냥 경우;)

$string = "16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1"; 

$tv_regions_ids = explode(",", $string); 
+0

의견을 보내 주셔서 감사합니다.하지만 제 질문에서 언급했듯이, $ tv_region_ids를 배열로 변경하면 다음 오류가 발생합니다. Notice : 배열에서 문자열로 변환 ... 라이브러리/Doctrine/DBAL/Connection.php on line 574 – Sid

관련 문제