当前位置:  开发笔记 > 编程语言 > 正文

有条件地建立一个Eloquent查询

如何解决《有条件地建立一个Eloquent查询》经验,为你挑选了1个好方法。

上下文

我使用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();
}

如果我在没有参数的情况下调用它,API将返回数据库中所有汽车的列表.但是,如果我指定(例如)0API的状态返回一个空集,尽管有些汽车的状态为0.

我接近这个错误吗?有什么根本我缺席的吗?

请注意,如果我改为:

$results = Cars::where('status', 0);
return $results->get();

正确生成汽车列表



1> Marcin Nabia..:

你应该像这样改变你的功能:

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();
}


`query()`来自[model instance](http://laravel.com/api/5.1/Illuminate/Database/Eloquent/Model.html).更好地阅读api和源代码以了解更多:)
推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有