4

ユーザーからのカスタム検索に応じて動的クエリを作成しようとしています。問題があります。クエリを作成しているときに、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', '%');
}

このコードでは、LIKE '%' (mysql) で選択されていない一部の列に NULL 値があるため、結果がありません。

4

1 に答える 1

0

これを試して:

$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');
于 2012-10-15T21:34:59.900 に答える