Symfony2 — построитель запросов LIKE нулевых значений

Я пытаюсь создать динамический запрос в ответ на пользовательский поиск пользователей. У меня проблема: когда я строю запрос, у меня нет результатов, потому что сравнение столбцов SELECT LIKE не работает со значениями NULL. Как я могу обойти эту проблему, учитывая, что запрос создается динамически? Таким образом, пользователи могут давать значения или не давать критерии поиска...

Это мой код:

$qb->add('select', 'f')
   ->add('from', 'Bundle:Object f')
   ->add('where', $qb->expr()->andx(
            $qb->expr()->like('f.c1',':c1'),
            $qb->expr()->like('f.c2',':c2'),
            $qb->expr()->like('f.c3',':c3')))
   ->add('orderBy', 'f.nnumCatalogo ASC');
if ($data->getField1() != null) {
  $isField1 = true;
}
if ($data->getField2() != null) {
  $isField2 = true;
}
if ($data->getField3() != null) {
  $isField3 = true;
}
if ($isField1) {
  $qb->setParameter('c1', $data->getField1());
} else {
  $qb->setParameter('c1', '%');
}
if ($isField2) {
  $qb->setParameter('c2', $data->getField2());
} else {
  $qb->setParameter('c2', '%');
}
if ($isField3) {
  $qb->setParameter('c3', $data->getField3());
} else {
  $qb->setParameter('c3', '%');
}

С этим кодом у меня нет результатов, потому что значения NULL в некоторых столбцах не выбраны с помощью LIKE '%' (mysql).


person user1748166    schedule 15.10.2012    source источник


Ответы (1)


Попробуй это:

$qb->add('select', 'f')->add('from', 'Bundle:Object f');
if ($data->getField1() != null) {
    $qb->andWhere('f.c1 like :c1')
    ->setParameter('c1', $data->getField1());
}
if ($data->getField2() != null) {
    $qb->andWhere('f.c2 like :c2')
    ->setParameter('c2', $data->getField2());
}
if ($data->getField3() != null) {
    $qb->andWhere('f.c3 like :c3')
    ->setParameter('c3', $data->getField3());
}
$qb->add('orderBy', 'f.nnumCatalogo ASC');
person Max Małecki    schedule 15.10.2012