2015-10-06 81 views
0

我正在構建Symfony應用程序,用戶可以通過包含許多字段的搜索表單進行一些搜索。現在我的DQL查詢如下所示:DQL如何在參數爲空時返回所有記錄

$users = $repository->createQueryBuilder('u') 
     ->addSelect('u') 
     ->from('AppBundle:User', 'b') 
     ->where('u.Number = :Number **OR u.Number = :blank'**) 
     ->andWhere('u.Code = :Code') 
     ->setParameter('Number', $Number) 
     ->setParameter('blank', $blank) 
     ->setParameter('Code', $code) 
     ->getQuery() 
     ->getResult(); 

的問題是,我希望我的請求,當用戶離開一些領域的空白返回與條件的所有記錄。現在沒有記錄被返回,因爲系統認爲我想要具有特定「空白」標準的條目。我會很感激任何想法。謝謝

回答

0

如果我理解正確的話,你確實有在這種情況下2個參數,它們是:NumberCode。如果其中一個是「空白」,那麼你有blank變量集?

如果是這樣的話,我想你應該寫你的要求是這樣的:

$query = $repository->createQueryBuilder('u') 
     ->addSelect('u') 
     ->from('AppBundle:User', 'b') 

if ($Number != "") 
    $query->where('u.Number = :Number') 
     ->setParameter('Number', $Number); 

if ($code != "") { 
    if ($Number != "") $query->andWhere('u.Code = :Code'); 
    else $query->where('u.Code = :Code'); 
    $query->setParameter('Code', $code); 
} 

$users = $query->getQuery()->getResult(); 
+0

)它可以工作!!如果我現在還沒有2個字段,但是,比如說10個搜索字段,爲了證明用戶輸入的每一種可能情況,我需要寫10個if-else塊,甚至是10 * 10個塊,對嗎?或者,對於這種情況,可能有任何解決方法?謝謝 – Jack

+0

如果你有多個字段,你應該把它放在一個數組中,這樣你就可以用'foreach'循環替換上面的行了。 – Dric512

+0

好的建議,謝謝。有沒有可能看到這樣的實現的例子?我會花很多時間來通過這個))) – Jack

1

您可以在DQL中使用Expr class來進一步圍繞用戶提交的'空白'字段進行查詢。簡單if(!empty($field))會做的伎倆

$query = $repository->createQueryBuilder('u') 
    ->addSelect('u') 
    ->from('AppBundle:User', 'b') 
    ->where('u.Number = :Number') 
    ->andWhere('u.Code = :Code') 
    ->setParameter('Number', $Number)  
    ->setParameter('Code', $code); 

if(!empty($blank)){ 
    $query->andWhere($query->expr()->orX(
    $query->expr()->eq('u.Number', ':blank') 
)); 
    $query->setParameter('blank', $blank); 
} 

$users = $query->getQuery()->getResult(); 
+0

,並$空白的值應該是什麼?現在我把它設置成這樣:'$ blank =「」;'並且它認爲我想要它的空白條目並且什麼也不返回(( – Jack

相關問題