Laravel API:如何仅获取一些字段并对响应进行排序

时间:2018-06-30 16:14:46

标签: laravel api

我想知道我是否做对了。

假设我有一个表格“国家”。要以某种顺序仅获取此表的某些字段,我有以下网址:

/ countries?fields = id,country_name&desc = country_name

结果很清楚:

[
    {
        "id": "SP",
        "country_name": "Spain"
    },
    {
        "id": "IT",
        "country_name": "Italy"
    },
    {
        "id": "FR",
        "country_name": "France"
    },
    {
        "id": "CN",
        "country_name": "China"
    } ]

为此,我有这条路线:

Route :: get('/ countries','CountryController @ index');

方法索引为:

public function index(Request $request)
{

    $query = Country::query();

    if ($request->has('fields')){         
        $fields = explode(',', $request->input('fields') );          
        foreach ($fields as $field) {
            $query->addSelect($field);
        }        
    }

    if ($request->has('sort')){
        $query->orderBy($request->input('sort'));
    }

    if ($request->has('desc')){
        $query->orderBy($request->input('desc'), 'desc');
    }

    $countries = $query->get();

    return response()->json($countries, 200);
}

工作正常。

我的问题仅仅是:我做对了吗?还有其他方法吗?

非常感谢您的反馈。 谢谢

Dom

3 个答案:

答案 0 :(得分:1)

要防止未知列异常,请尝试以下操作:

  1. 导入架构类use Illuminate\Support\Facades\Schema;
  2. 添加此内容:

    $table = "countries";
    if ($request->has('fields')){
        $fields = explode(',', $request->input('fields') );
        foreach ($fields as $field) {
            if(!Schema::hasColumn($table,$field)){
                return response("Unknown field", 422);
            }
            $query->addSelect($field);
        }
    }
    

答案 1 :(得分:0)

您对我所做的事情没有任何漏洞,并且也非常优化。

答案 2 :(得分:0)

您可以尝试使用此功能:

$countries = $query->pluck('id', 'country_name');

请检查并告知我。