Laravel API - 当状态字段为空时显示所有地区
Posted
技术标签:
【中文标题】Laravel API - 当状态字段为空时显示所有地区【英文标题】:Laravel API - Display all districts when state field is empty 【发布时间】:2021-09-08 12:42:38 【问题描述】:下面给出的是我的代码,用于显示输入状态的特定区域。但是在这段代码本身中,如果状态字段为空,我想显示数据库中的所有地区。如何修改我的代码以获得这样的输出。所以,我想要的 API 可以在调用 api 时返回所有地区。并且只有在输入状态字段时,它才会显示特定于它的特定地区。帮助我提出你的建议。
public function state_lookup(Request $request)
$validator = Validator::make
($request->all(),
[
'state' => 'string',
]
);
if ($validator->fails())
return response()->json(
[$validator->errors()],
422
);
if(empty($request->state))
$dist=PersonalDetails::get(['district']);
return response()->json($dist);
$data = PersonalDetails::where('state',$request->state)->get(['district']);
// dd($data);
if(count($data))
return response()->json(['message'=>'success','data'=>$data]);
else
return response()->json(['message'=>'Invalid State']);
在失败的情况下,我得到如下 json 结果
"message": "success",
"data": []
它显示“成功”而不是“无效状态”
【问题讨论】:
【参考方案1】:试试这个,
//In your controller
$request->validate([
'state' => 'string'
]);
// $request->validate it self return error messages you have to display
// for an example (write below code in your blade file)
@error('state')
<div class="alert alert-danger"> $message </div>
@enderror
// write below code in your controller file
$details = PersonalDetails::select('district');
$details->where(function($query) use($request)
if (isset($request->state) && $request->state != '')
$query->where('state', $request->state);
// do what you want to filter in your query like above
);
$data = $details->get();
【讨论】:
【参考方案2】:您可以使用when
$data = PersonalDetails::when(!empty($request->state),function ($query)use($request)
$query->where('state',$request->state);
)->get(['district']);
或
$data = PersonalDetails::where(function ($query)use($request)
if(isset($request)&&!empty($request))
$query->where('state',$request->state);
)->get(['district']);
为了避免0键响应变化如下
if(count($data))
return response()->json(['message'=>'success','data'=>$data]);
【讨论】:
查看更新问题。为什么我的成功消息中有一个“0”。我不希望它出现。如何消除? 我在无效的情况下也获得了“成功”。为什么会这样?请查看我更新的问题 @MG 更新了答案。如果有任何问题,请告诉我 添加count($data)后结果没有变化 @MG.再次检查您的代码。它应该可以工作。只有当它至少有一个数据时才会进入 if 条件,否则它会进入 else 条件以上是关于Laravel API - 当状态字段为空时显示所有地区的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 8 中为 API 返回验证规则和消息作为 JSON
当 API 返回空数据时显示警告(Vue.js / Axios)