2016-06-25 112 views
0

我有一個表單搜索,我想通過布爾型字段來選擇數據。問題是,如果選擇選項的值爲假(0),則查詢將返回所有數據,但如果選擇的選項具有真值(1),則查詢是正確的。symfony3:query_builder按布爾型字段搜索

在formTye:

  ->add('publier', ChoiceType::class, array(
      'required' => false, 
      'label' => 'Publier', 
      'choices' => array('oui' => '1', 'non' => '0'), 
      'multiple' => false, 
      'expanded' => false, 
      'attr' => array('class'=> 'form-control') 
     )); 

,並在query_builder

 if (!empty($publier)) { 
     $qb->andWhere('a.publier = :publier') 
      ->setParameter('publier', $publier ); 
    } 

如果我刪除這個測試:(!空($ publier))如果{我選擇一個錯誤的選擇返回的數據是正確的,但我無法刪除此測試。

回答

1

我已經

if (null !== $publier) 

改變

if (!empty($publier)) 

,它工作正常現在

+1

這是預期的行爲。 [手冊](https://secure.php.net/empty)會給你一個被認爲是空的值列表。 「假」是其中之一 – kero

0

我不知道我理解你的問題很明顯,但如果這是你想要一個布爾值,你應該試試這個:

->add('publier', ChoiceType::class, array(
    'required' => false, 
    'label' => 'Publier', 
    'choices' => array(
     'oui' => true, 
     'non' => false 
    ), 
    'multiple' => false, 
    'expanded' => false, 
    'attr' => array('class'=> 'form-control') 
)); 

不知道是否會工作。你有'1'和'0'的方式,那些是字符串(不是整數)。

+0

我已經改變了**,如果(!空($ publier))** **通過如(null!== $ publier)**,它現在正常工作 – hous