2014-12-15 3 views
1

Я хочу добавить orWhere условия для запроса строителя. params будет поступать из массива. но я не знаю, как я могу добавить количество операторов orWhere, равное количеству элементов массива count. Вот какой-то код:Множественные условия в EntityRepository Symfony2

public function selectRelatedTrips($assoc) 
{ 
    $params = array('k' => 'Kiev'); 
    $query = $this 
     ->getEntityManager() 
     ->createQueryBuilder() 
     ->select('t') 
     ->from('VputiTripBundle:Trip', 't') 
     ->where('t.startCity = :k'); 

    foreach ($assoc as $k => $v) { 
     //   $query->orWhere('t.startCity = ' . $v); 
     $query->where('t.startCity = :param' . $k); 
     $params['param' . $k] = $v; 
    } 

    return $query->setParameters($params) 
     ->setMaxResults(20) 
     ->orderBy('t.id', 'desc') 
     ->getQuery() 
     ->getResult(); 
} 

Может ли кто-нибудь помочь мне, пожалуйста?

ответ

1

Попробуйте построить запрос динамически, основанный на массиве:

$params = array('param1' => 123); 

$query = $this 
    ->createQueryBuilder('e') 
    ->select('e') 
    ->where('e.field = :param1') 

foreach ($assoc as $k => $v) { 
    $query->orWhere('e.field2 = :param'.$k); 
    $params['param'.$k] = $v; 
} 

$query->setParameters($params); 
+0

hm. странный. У меня есть ошибка: Недопустимый номер параметра: количество связанных переменных не совпадает с числом токенов – nowiko

+1

Число параметров не совпадает. Отлаживайте свой sql и ваш массив с параметрами, чтобы увидеть, имеет ли они ту же длину, или если ключи соответствуют –

+1

Я думаю, проблема в том, что ': param' не уникален. –

2

Вы можете использовать функцию in():

class AcmeRepository extends EntityRepository 
{ 
    public function selectRelatedTrips($assoc) 
    { 
     $qb = $this->createQueryBuilder('e'); 

     $qb = $qb 
      ->where(
       $qb->expr()->in('e.field2', array_keys($assoc)) 
      ); 

     return($qb->getQuery()->getResult()); 
    } 
} 

См How to use WHERE IN with Doctrine 2 и Doctrine2 Query Builder для ссылок.

Смежные вопросы