Doctrine Custom Query Builder Фильтры - PullRequest
2 голосов
/ 27 апреля 2011

Это ситуация (код ниже не работает):

if(is_array($filters))
     {
        $f = array();

        foreach($filters as $filter)
        {
            $f[] = $qb->expr()->like("p.tags","'%" . $filter . "%'");
        }

        $qb->andWhere($qb->expr()->orx($f));
     }

Мне нужно передать пользовательские / множественные выражения в функцию orx , но я не знаю как!!

Систаксис функции orx:

$ qb-> expr () -> andx ($ cond1 [, $ condN])

Исправленный пример (Извлечено из доктрины):

$qb->add('select', $qb->expr()->select('u'))
->add('from', $qb->expr()->from('User', 'u'))
->add('where', $qb->expr()->orx(
   $qb->expr()->eq('u.id', '?1'),
   $qb->expr()->like('u.nickname', '?2')
))

Помогите пожалуйста !!

Ответы [ 2 ]

0 голосов
/ 25 октября 2016

Чистое решение:)

if(is_array($filters))
{
    $f = array();

    $orCondition = $qb->expr()->orX();
    foreach($filters as $filter)
    {
        $orCondition->add($qb->expr()->like("p.tags", "'%" . $filter . "%'"));
    }

    $qb->andWhere($orCondition);
}

Или вы можете сделать:

$orCondition->addMultiple(<conditions_array>);
0 голосов
/ 08 февраля 2015

(ответ в редактировании вопроса. Преобразован в вики-ответ сообщества. См. Какое действие подходит для добавления ответа на вопрос к самому вопросу? )

ОП писал:

Решено, Решение:

 if(is_array($filters))
 {
    foreach($filters as $filter)
    {
        $temp[] = $qb->expr()->like("p.tags","'%" . $filter . "%'");
    }
    $qb->andWhere(call_user_func_array(array($qb->expr(),'orx'), $temp));
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...