rest - Laravel Restful API - 如何基于多个参数创建自定义查询

标签 rest laravel eloquent laravel-5 laravel-routing

我是 Laravel 新手。我用这条路线创建了一个 Restful API:(使用 Laravel 5)

Route::get('api/clubs', 'Api\ClubsController@getClubs');

调用/public/api/clubs将检索所有俱乐部 $clubs = Club::all();

使用相同的路线,我尝试根据许多参数过滤俱乐部:

        $filter_lat      = Request::get( 'fi_lat' );
        $filter_long     = Request::get( 'fi_long' );
        $filter_distance = Request::get( 'fi_distance' );
        $filter_key_word = Request::get( 'fi_key_word' );
        $filter_date     = Request::get( 'fi_date' );
        $filter_city_id  = Request::get( 'fi_city_id' );
        $filter_order_by = Request::get( 'fi_order_by' );
        $filter_offset   = Request::get( 'fi_offset' );
        $filter_limit    = Request::get( 'fi_limit' );

我想根据这些参数过滤我的俱乐部,但我不知道使用 Eloquent 构建查询的最佳方法是什么。即使我只有 1 个参数,我也希望能够运行查询。示例1:我想按城市过滤我的俱乐部,我的查询将如下所示:

$clubs = Club::where( 'city_id', $filter_city_id )->get();

如果我有更多参数,我的查询将如下所示:

$clubs = Club::where( condition 1 )

->where( condition 2 )

->where( condition 3 ) etc ..

->get();

如何以这种方式构建查询并将所有条件放在一起?

if( !empty ( $my_param ) ){
$query += where ( condition .. )
}

然后运行 ​​$query ..

我不想做的,是做 10 个“if() 测试”并根据参数构建 10 个查询,因为这将是一个很大的代码黑客攻击和重复查询..

我愿意接受任何建议,我希望最终能有一个俱乐部的目标。谢谢!

最佳答案

很简单,只需检查每个条件是否通过,如果通过,则添加一个 where 子句。

$query = Club::newQuery();

    if($my_param) {
        $query->where('my_param', $my_param);
    }

    if($my_param2) {
        $query->where('my_param2', $my_param2);
    }

    $clubs = $query->get();

您应该检查变量是否已设置,因为这是处理用户提交的数据时的良好做法。如果有一些参数需要进一步验证,请务必使用验证类。

关于rest - Laravel Restful API - 如何基于多个参数创建自定义查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31008513/

相关文章:

rest - 带有执行器的 Spring Boot 应用程序

java - 谁能告诉我如何消除这个异常

java - 处理 rest webservice url 中单个查询参数的多个值并使用 hibernate 条件处理它们

php - 计算用户在搜索结果中的排名[Laravel]

php - 在保留测试数据的同时在 laravel 5.2 迁移中添加字段的过程是什么?

java - HTTP请求参数类型传播

laravel - 从路线获取参数?

mysql - Laravel/MySQL 使用 AVG 时(仅计算给定 id 上返回的第一行) - 如何?

php - Laravel Eloquent 查询时进行过滤

mysql - 我的 SQL 查询有什么问题?