Laravel Restful API - 如何基于多个参数创建自定义查询
Laravel Restful API - How to create custom query based on multiples params
我是 Laravel 的新手。我用这条路线创建了一个 Restful API : (with 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 .. )
}
然后 运行 $查询 ..
我不想做的事情,正在做 10 次 "if() tests" 并根据参数构建 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();
您应该检查变量是否已设置,因为这是处理用户提交的数据时的良好做法。如果有一些参数需要进一步验证,一定要使用验证class.
您可以在 where()
中使用 array
。像这样:
User::where(['id' => $id, 'name' => $name, 'etc' => $etc])->get();
:)...
我是 Laravel 的新手。我用这条路线创建了一个 Restful API : (with 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 .. )
}
然后 运行 $查询 ..
我不想做的事情,正在做 10 次 "if() tests" 并根据参数构建 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();
您应该检查变量是否已设置,因为这是处理用户提交的数据时的良好做法。如果有一些参数需要进一步验证,一定要使用验证class.
您可以在 where()
中使用 array
。像这样:
User::where(['id' => $id, 'name' => $name, 'etc' => $etc])->get();
:)...