Laravel 使用变量查询建筑

Laravel query building with variables

假设我有 $var1 和 $var2 这样的变量。

假设我想要一个像

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

当我的变量为空时,这个当然不起作用。我想控制它们,如果它们是空的就做点什么。

我应该根据这些变量创建一个查询,并使用它们持有的值过滤它们。

关于如何做到这一点还有其他想法吗?

不确定这是否是您想要的,但您可以使用条件轻松地在多个 "steps" 中构建查询:

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

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

$result = $query->get();

例如你可以这样做:

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

这是一个解决方案:

$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();

编辑:将 ::where 更正为 ->where