2015-02-10 128 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