带有查询参数的Laravel REST API

时间:2013-01-27 11:10:36

标签: php mysql laravel

所以我已经启动并运行了一部分API,但我坚持一些事情。我正在使用Laravel的REST控制器,并且喜欢使用诸如Response::eloquent($query);之类的方法的能力但是,在使用它时:

  1. 如果我获得的资源正在加入多个表,我该如何处理查询参数(例如id = 27& order_by = timestamp)?
  2. 我应该从数据库中获取值,然后构建一个只包含我想要显示的某些字段以进行API访问的数组吗?那么它如何与查询参数一起使用?

2 个答案:

答案 0 :(得分:4)

首先,我建议您观看Teach a Dog to REST [Link broken],了解有关格式化REST路线的更多信息。

关于你的问题:

  1. 您可以通过laravel input & cookies docs中提到的Input::get() and Input::all()方法处理输入字段。您可能还需要使用laravel的Validator类验证传入数据。
  2. 假设您从示例中提到的输入中获取了id和order_by字段:

    Input::get() and Input::all()

  3. 使用Fluent Query Builder

    $id = Input::get('id');
    $order_criteria = Input::get('order_by');

    //使用first(),因为我们非常确定我们只得到一个结果,对于不同的标准,可能会返回多个结果,您可能想要使用 - > gt; get()代替。

答案 1 :(得分:3)

我为此发布了一个包。

您可以查看this question

对于维基页面:https://github.com/selahattinunlu/laravel-api-query-builder

此包使用url参数创建查询。

示例:

/ API /用户名= SE *安培;年龄= 18&安培;!ORDER_BY =年龄,ASC&安培;极限= 2及列=姓名,年龄,city_id&安培;包括=城市

结果查询

Users::with(['city'])->select(['name', 'age', 'city_id'])
                     ->where('age', '!=', 18)
                     ->where('name', 'like', 'se%')
                     ->orderBy('age', 'asc')
                     ->take(2)

用法:

$queryBuilder = new QueryBuilder(new User, $request);

return response->json([
  'data' => $queryBuilder->build()->paginate(),
  .
  .
]);

这就是全部。