Laravel查询字符串少于/大于等

时间:2016-04-03 17:28:23

标签: php rest laravel

在laravel中,我可以在资源控制器中写这个来响应获取请求(让我们说资源是产品):

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);
}

这适用于使用&#34; =&#34;的请求,例如在示例中。但是,如果我们不想搜索价格= 500,但可能价格<= 500或价格&gt; 500.对此最好的Laravel(和RESTful)方法是什么?

注意:Laravel 5.2

1 个答案:

答案 0 :(得分:1)

你可以这样做。

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评论后编辑:

如果您还想传递查询的运算符,可以向网址添加新参数,例如

/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);
}