所以我有一部分 API 启动并运行,但我被困在一些事情上。我正在使用 Laravel 的 REST 控制器,并且喜欢使用诸如Response::eloquent($query);
但是这样的方法的能力,在使用这个时:
- 如果我得到的资源正在加入多个表,我应该如何处理查询参数(例如 id=27&order_by=timestamp)?
- 我是否应该从数据库中获取值,然后构造一个数组,其中只包含我想为 API 访问显示的某些字段?那么这将如何与查询参数一起使用?
首先,我建议您观看Teach a Dog to REST [Link broken] 以获取有关格式化 REST 路由的更多信息。
至于你的问题:
Input::get() and Input::all()
中提到的方法处理输入字段。您可能还必须使用 laravel 的 Validator 类来验证传入数据。假设您从示例中提到的输入中获取了 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() 代替。
我为此发布了一个包。
你可以看看这个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(),
.
.
]);
就这样。