2015-02-10 129 views
0

假設我有像$ var1和$ var2這樣的變量。Laravel查詢建立變量

以爲我想有一個像

$myQuery = DB::table('myTable') 
      ->where('firstField', '=', $var1) 
      ->where('secondField', '=', $var2) 
      ->get(); 

查詢當然,當我的變量是null,則此一不工作。我想控制它們,如果它們爲空,就做點什麼。

我應該根據這些變量創建一個查詢,並用它們保存的值對它們進行過濾。

任何其他的想法如何做到這一點?

回答

1

這裏有一個解決方案:

$results = DB::table('myTable')->where(function($query) use ($var1, $var2) { 
       if (! empty($var1)) { 
        $query->where('firstField', '=', $var1); 
       } 
       if (! empty($var2)) { 
        $query->where('secondField', '=', $var2); 
       } 
      })->get(); 

編輯:更正::在哪裏 - >其中

1

不知道這是你想要的,但你可以很容易地建立多個查詢「臺階」使用條件語句:

$query = DB::table('myTable'); 

if($var1 !== null){ 
    $query->where('firstField', $var1); 
} 
if($var2 !== null){ 
    $query->where('secondField', $var2); 
} 

$result = $query->get(); 
+0

這可能也是一個解決方案,但這在我的情況下不起作用。我加入表格。另外還有一個語法錯誤,比如'firstField','$ var1'應該是'firstField','=',$ var1,不過謝謝你給我的想法。 – 2015-02-10 14:11:19

+0

那麼在你的問題中沒有加入......我不明白爲什麼這不應該與連接一起工作。另外'='可以省略 – lukasgeiter 2015-02-10 14:15:39

+0

無論如何感謝您的參與。 – 2015-02-10 14:31:42

1

例如你可以這樣:

$myQuery = DB::table('myTable') 
     ->where('firstField', '=', is_null($var1)?0:$var1) 
     ->where('secondField', '=', is_null($var2)?0:$var2) 
     ->get(); 
+0

你能提供一些解釋嗎? – 2015-02-10 13:28:44

+0

blankBird_表示如果這些變量爲空,它的代碼將不起作用。它的意思是你可以檢查它,如果它是空的,你可以在表0中找到,或者,例如'null'。 – Mario 2015-02-10 13:30:44

+0

也許這會有助於解釋你正在使用的三元邏輯,有些人可能不熟悉它。 – 2015-02-10 13:34:02