具有可选参数的Laravel Eloquent查询

时间:2014-08-01 02:59:45

标签: laravel eloquent

我正在尝试了解是否有一种简单的方法可以在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

这可能吗?

2 个答案:

答案 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);