2016-11-10 8 views
0

мне нужно фильтровать в доктрине через несколько таких областей, как следующее:Доктрина фильтрации по нескольким столбцам

SELECT company , state 
FROM employees 
WHERE 
(company, state) <> ('xxxxx', 'xxxx') 
AND 
(company, state) <> ('xxxx', 'xxxx') 
GROUP BY company, state 

Я попытался следующим образом:

$qb->andWhere($qb->expr()->andX($qb->expr()->neq('b.company',"'".$i['description']."'"), $qb->expr()->neq('b.state', "'".$i['state']."'"))); 

Но результат не желателен:

(company <> 'xxxxx' AND state <> 'xxxx') AND (company <> 'xxxxx' AND state <> 'xxxxx') 

Как я могу сделать первую через доктрину? привет!

ответ

0

Этот запрос выше может работать как ИЛИ двух списков, которые упростят для вас вещи.

E.g.

ГДЕ состояние НЕ В штатах ИЛИ компания НЕ В компании

Как будто либо истинно, то комбинация этого сотрудника компании + государства не исключен один.

Учитывая, что вы могли бы выполнить это, как показано ниже:

$qb = $this->getEntityManager()->createQueryBuilder(); 

    $excludedCompanies = ['company1', 'another company', 'company etc']; 
    $excludedStates = ['state1', 'another state', 'state etc']; 

    return $qb->select('e.company, e.state') 
     ->from('YourBundle:Employee', 'e') 
     ->where($qb->expr()->notIn('e.company', ':excludedCompanies')) 
     ->orWhere($qb->expr()->notIn('e.state', ':excludedStates')) 
     ->setParameter('excludedCompanies', $excludedCompanies) 
     ->setParameter('excludedStates', $excludedStates) 
     ->groupBy('e.company') 
     ->addGroupBy('e.state') 
     ->getQuery() 
     ->getResult() 
    ; 
+0

Танки! Поверьте, что объединение двух списков «не в» не будет сочетать поля. !! @Richard – jotamolas

+0

Например, если у меня есть "paris, acme s.a." И «Лондон, свобода с.а.» Когда вы вводите новую строку «paris, liberty s.a», запрос не возвращает ее. – jotamolas

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

  • Нет связанных вопросов^_^