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
假设我有 $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