Php LaravelRESTAPI:将查询字符串参数转换为数据库搜索查询

Php LaravelRESTAPI:将查询字符串参数转换为数据库搜索查询,php,laravel,eloquent,asp.net-web-api,Php,Laravel,Eloquent,Asp.net Web Api,我一直在使用Laravel4&Elount为我的移动应用程序编写API。我已经阅读了一些关于编写一个好的API的细节,包括Phil和apigee APIgee谈到了查询字符串下的全面复杂性。从查询字符串获取参数可能会很麻烦,因为参数的数量和类型可能会有所不同。例如,要得到一只黑色的狗,请求将是 http://url.com/api/dogs?color=black 黑颜色和年龄的狗会是 http://url.com/api/dogs?color=black&age=16 $dogs

我一直在使用Laravel4&Elount为我的移动应用程序编写API。我已经阅读了一些关于编写一个好的API的细节,包括Phil和apigee

APIgee谈到了查询字符串下的全面复杂性。从查询字符串获取参数可能会很麻烦,因为参数的数量和类型可能会有所不同。例如,要得到一只黑色的狗,请求将是

http://url.com/api/dogs?color=black
黑颜色和年龄的狗会是

http://url.com/api/dogs?color=black&age=16

$dogs = new Dog;

if(Input::get('color'))
    $houses->where('color', '=', Input::get('color'));

if(Input::get('age'))
    $houses->where('age', '=', Input::get('age'));
// Keep adding more for every filter you have :-|

$dogs = $dogs->get();
另一种更好的方法是使用DB列名作为参数名,并使用foreach循环来构造查询


但是,我想知道是否有一个替代方法,或者这个是否是处理查询字符串的标准方法。

我认为如果您有一个3-4个参数,那么您可以像上面所做的那样单独检查它们

但如果您有许多参数,那么您可以使用foreach循环,采取预防措施避免从隐藏字段(如id)进行搜索…下面的示例

$inputs = Input::except('id', 'something_cannot_be_used_for_searching');

    foreach($inputs as $key => $input)
    {
     //Stmts
    }
如果还有其他问题,请告诉我。
谢谢:)

我想概括一下这段代码,转到模型或验证,定义异常并在那里运行查询。我想我也必须坚持使用foreach循环,如果你想在你的模型中使用查询范围,并且可以很容易地重复使用它。我还将使用一个包含可接受参数白名单的数组。为什么使用$dogs=$dogs->get()而不在get()方法中包含查询过滤器?我正试图做与您相同的事情,但似乎无法让您的代码为我的API工作。