我正在尝试了解是否有一种简单的方法可以在Eloquent中将可变数量的参数传递给查询,希望使用array
。
根据我的发现,似乎没有办法在不通过Input
循环查看请求中设置的内容的情况下执行此操作。
此处的示例:Laravel Eloquent search two optional fields
这样可行,但在复杂性/不优雅方面对我来说不是Laravel。
这就是我的地方,这可能是不可能的,只是希望其他人解决了类似的问题:
$where = array("user_id" => 123, "status" => 0, "something else" => "some value");
$orders = Order::where($where)->get()->toArray();
return Response::json(array(
'orders' => $orders
),
200
);
返回错误strtolower() expects parameter 1 to be string, array given
。
这可能吗?
答案 0 :(得分:7)
Order ::其中实际返回查询构建器的实例,因此这可能比您想象的更容易。如果您只想获取查询构建器的实例并且" build"你的查询一个(),你可以像这样得到它:
$qb = (new Order)->newQuery();
foreach ($searchParams as $k => $v) {
$qb->where($k, $v);
}
return $qb->get(); // <-- fetch your results
如果您想查看查询构建器正在执行的操作,您还可以执行get()以及之后不久:
dd(\DB::getQueryLog());
这将显示生成的查询的外观;这在使用Eloquent时非常有用。
答案 1 :(得分:1)
您可以尝试以下方法:
方法1:
如果输入中收到一个可选的搜索参数
$orders = Order::select('order_id','order_value',...other columns);
if($request->has(user_id)) {
$orders->where('orders.user_id','=',$request->user_id);
}
//considering something_else as a substring that needs to be searched in orders table
if($request->has('something_else')) {
$orders->where('orders.column_name', 'LIKE', '%'.$request->something_else.'%');
}
$orders->paginate(10);
方法2:
如果输入中有多个可选参数
$orders = Order::select('columns');
foreach($input_parameters as $key => $value) {
//this will return results for column_name=value
$orders->where($key, $value);//key should be same as the column_name
//if you need to make some comparison
$orders->where($key, '>=', $value);//key should be same as the column_name
}
return $orders->paginate(15);