2012-10-15 82 views
4

我試圖構建一個響應於來自用戶的自定義搜索的動態查詢。我有一個問題,當我構建查詢時,由於SELECT LIKE列比較不能使用NULL值,所以我沒有結果。考慮到這個查詢是在建立的,我怎樣才能解決這個問題?因此,用戶可以給值或不爲搜索條件...Symfony2 - 查詢生成器LIKE空值

這是我的代碼:

$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「%選擇NULL值'(mysql)。

問候,

哈維爾

回答

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'); 
相關問題