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

时间:2015-06-23 16:36:11

标签: 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个参数,我希望能够运行查询。 example1:我想按城市过滤我的俱乐部,我的查询看起来像:

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

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

  

$ clubs = Club :: where(condition 1)

     

- >其中(条件2)

     

- >其中(条件3)   等等。

     

- >得到();

如何以这种方式构建我的查询并整合所有条件?

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

然后运行$ query ..

我不想做的事情,正在做10“if()测试”并根据params构建10个查询,因为这将是一个很大的代码黑客攻击和重复查询.. < / p>

我对任何建议持开放态度,我希望有一个俱乐部的对象。谢谢!

2 个答案:

答案 0 :(得分:3)

这非常简单,只需检查每个条件是否通过,如果是,请添加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();

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

答案 1 :(得分:1)

您可以在array内使用where()。像这样:

User::where(['id' => $id, 'name' => $name, 'etc' => $etc])->get();

:)...