我想知道我是否做对了。
假设我有一个表格“国家”。要以某种顺序仅获取此表的某些字段,我有以下网址:
/ 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
答案 0 :(得分:1)
要防止未知列异常,请尝试以下操作:
use Illuminate\Support\Facades\Schema;
添加此内容:
$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');
请检查并告知我。