2010-12-27 6 views
9
여기

에 WHERE 절에 "IN"에 대처하는 방법 내가 setParameter를 교리를 통해 매개 변수는 첫 번째 결과를 반환 통과하면 DQL 쿼리는 Doctrine2

$dql = "SELECT t Entities\Table t WHERE t.field IN (?1)"; 
    $q = $em->createQuery($dql) 
       ->setParameter(1, '108919,108920'); 
    $result = $q->execute(); 

입니다,하지만 난 DQL에 직접 넣어 경우 이 두 결과를 (이 올바른지) 반환 - 쿼리 :

setParameter를 통해 WHERE 절에 "IN"에 대처하는 방법
$dql = "SELECT t Entities\Table t WHERE t.field1 IN (108919,108920)"; 

?

답변

0

용액 1 : 2 (더 우아)

$dql = "SELECT t Entities\Table t WHERE t.field IN (?1, ?2)"; 
$q = $em->createQuery($dql) 
->setParameters(array(1 =>'108919', 2 => '108920')); 
$result = $q->execute(); 

해결책 :

$parameters = array(1 =>'108919', 2 => '108920'); 
$dql = 'SELECT t Entities\Table t WHERE t.field IN (?'.implode(', ?', array_keys($parameters)).')'; 
$q = $em->createQuery($dql) 
->setParameters($parameters); 
$result = $q->execute(); 
1

예상대로

$params = array(1 => 108919, 2 => 108920); 
$qb = $em->createQueryBuilder(); 
$qb->select(array('t')) 
    ->from('Entities\Table', 't') 
    ->where($qb->expr()-> in('t.field', array_map(function($p) { return '?'.$p; }, array_keys($params))) 
    ->setParameters($params); 
$q = $qb->getQuery(); 
$r = $q->getResult(); 
합니다 ( IN 절에 임의의 인수 numer에 대해) 다음과 같은 작업을해야
6

다음은 정상적으로 작동합니다.

$searchParameters = array(108919, 108920); 

$dql = "SELECT t Entities\Table t WHERE t.field IN (?1)"; 
$q = $em->createQuery($dql) 
    ->setParameter(1, $searchParameters); 

$result = $q->execute(); 

implode()를 사용하지 않고 배열을 전달할 수 있습니다. 그러면 doctrine이 올바르게 처리합니다 (정수 목록으로).

참고 : 이미 '108919, 108920'문자열로 작업하는 경우 - 분해 및 트림 기능을 사용해야합니다.

이것은 또한 여기에 언급되어 How to use the in statement in DQL in Doctrine 2.0

+0

을 작동하고, 따라서 내가 가정 할 것은이 질문에 대한 정답입니다. –

+0

Asker가 이것을 받아 들였어야합니다 .. 대답을 주셔서 감사합니다. :) – ihsan

9

는주의가이 번호의 매개 변수에 대해서만 작품, 그리고 명명 된 매개 변수.

$searchParameters = array(108919, 108920); 

$dql = "SELECT t Entities\Table t WHERE t.field IN (?1)"; 
$q = $em->createQuery($dql) 
    ->setParameter(1, $searchParameters); 

$result = $q->execute(); 
+2

배열 매개 변수가 작동하지 않는 이유를 알아 내려고 노력하고 있습니다. 내 이름 붙은 매개 변수를 내 날에 저장했습니다 :-) –

+1

난 그냥이 질문을 가로 질러 와서 어쨌든 명명 된 매개 변수로 그것을 시도했다. 이 대답 사이의 어딘가에있는 것처럼 보입니다. Doctrine은 명명 된 매개 변수에 대해서도이 구성을 허용하도록 변경되었습니다. –

0

이 이것은 나를 위해 작동

public function searchCategory($target){ 

     $query = $this->getEntityManager() 
        ->createQuery("SELECT ct.id as id,ct.name as name, ct.target as target FROM LoveThatFitAdminBundle:ClothingType ct WHERE ct.target IN (:target)") 
        ->setParameter('target',$target['target']); 
        try { 
        return $query->getResult(); 
       } catch (\Doctrine\ORM\NoResultException $e) { 
       return null; 
       } 

} 
관련 문제