小于/大于等的Laravel查询字符串


Laravel query string with less/greater than etc

在laravel中,我可以在资源控制器中写这篇文章来响应get请求(假设资源是产品):

public function index(Request $request)
{
    // Handles requests such as ".../api/products?user_id=5&price=500"
    $products = Product::where($request->toArray())->get();
    return response($products);
}

这适用于带有"="的请求,例如在示例中。但是,如果我们不想搜索价格=500,但可能价格<=500或价格>500。什么是最好的Laravel(和RESTful)方法?

注:Laravel 5.2

您可以这样做。

public function index(Request $request)
{
    // Handles requests such as ".../api/products?user_id=5&price=500"
    $products = Product::where('user_id', $request->user_id)->where('price', '<=', intval($request->price))->get();
    return response()->json($products);
}

或者:

public function index(Request $request)
{
    // Handles requests such as ".../api/products?user_id=5&price=500"
    $products = Product::whereRaw("user_id=? and price<=?", [$request->user_id, $request->price])->get();
    return response()->json($products);
}

在@Joel Hinz评论后编辑:

如果你也想传递查询的运算符,你可以在url中添加一个新的参数,例如

/api/products?user_id=5&price=500&op=1

然后切换控制器中的数字。

public function index(Request $request)
{
    // Handles requests such as ".../api/products?user_id=5&price=500&op=1"
    switch(intval($request->op)){
        case 1:
        $op = "<=";
        break;
        case 2:
        $op = ">";
        break;
        //and so on
        default:
        return response()->json("Wrong parameters");
        break;
    }
    $products = Product::whereRaw("user_id = ? and price $op ?", [$request->user_id, $request->price])->get();
    return response()->json($products);
}