sli*_*fty 3 php laravel eloquent laravel-5 laravel-query-builder
上下文
我使用Laravel的雄辩如我的ORM.我创建了一个API端点提供访问Cars其有几个属性(color,make,status).
我的端点允许客户端通过这些属性的任何子集过滤返回值,如果它们不提供任何属性,那么我将返回所有内容.
问题
我想构建一个条件查询,它从"全部"开始,并根据指定的参数缩小.这是我写的:
public function getCars(Request $request)
{
$results = Cars::all();
if($request->has('color'))
$results = $results->where('color', $request->input('color'));
if($request->has('make'))
$results = $results->where('make', $request->input('make'));
if($request->has('status'))
$results = $results->where('status', $request->input('status'));
return $results->toJson();
}
Run Code Online (Sandbox Code Playgroud)
如果我在没有参数的情况下调用它,API将返回数据库中所有汽车的列表.但是,如果我指定(例如)0API的状态返回一个空集,尽管有些汽车的状态为0.
我接近这个错误吗?有什么根本我缺席的吗?
请注意,如果我改为:
$results = Cars::where('status', 0);
return $results->get();
Run Code Online (Sandbox Code Playgroud)
正确生成汽车列表
你应该像这样改变你的功能:
public function getCars(Request $request)
{
$results = Cars::query();
if($request->has('color'))
$results = $results->where('color', $request->input('color'));
if($request->has('make'))
$results = $results->where('make', $request->input('make'));
if($request->has('status'))
$results = $results->where('status', $request->input('status'));
return $results->get()->toJson();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1104 次 |
| 最近记录: |