首页 > 解决方案 > Laravel API - 当状态字段为空时显示所有地区

问题描述

下面给出的是我的代码,用于显示输入状态的特定区域。但是在这段代码本身中,如果状态字段为空,我想显示数据库中的所有地区。如何修改我的代码以获得这样的输出。所以,我想要的 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": []
}

它显示“成功”而不是“无效状态”

标签: laravelpostgresqlapilaravel-8rest

解决方案


您可以使用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]);
} 

推荐阅读