1

所以我有一部分 API 启动并运行,但我被困在一些事情上。我正在使用 Laravel 的 REST 控制器,并且喜欢使用诸如Response::eloquent($query);但是这样的方法的能力,在使用这个时:

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

2 回答 2

4

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

至于你的问题:

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

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

使用流畅的查询生成器

DB::table('dbtable')->where('id', '=', $id)->order_by($order_criteria, 'desc')->first();

// 使用 first() 因为我们很确定我们只得到一个结果,对于不同的标准,可能返回多个结果,您可能希望使用 ->get() 代替。

于 2013-01-27T12:26:17.043 回答
3

我为此发布了一个包。

你可以看看这个https://github.com/selahattinunlu/laravel-api-query-builder

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

这个包使用 url 参数创建查询。

例子:

/api/users?name=se*&age!=18&order_by=age,asc&limit=2&columns=name,age,city_id&includes=city

和结果查询

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(),
  .
  .
]);

就这样。

于 2015-10-18T17:54:59.990 回答