laravel 在多表关联查询的时候,要搜索出关联表里面的数据 会出现,搜索结果不正确的问题,原因是在搜索的时候要进行判断一下

784 阅读1分钟
public function index(Request $request)
{
    $clubs = Club::with('clubExts')->orderBy('id', 'desc')
        ->when($request->club_name, function ($query) use ($request) {
            $query->where('club_name', 'like', '%' . $request->club_name . '%');
        });
    if (!empty($request->province_id)) {
        $clubs->whereHas('clubExts', function ($query) use ($request) {
            $query->where('province_id', $request->province_id);
        });
    }
    if (!empty($request->city_id)) {
        $clubs->whereHas('clubExts', function ($query) use ($request) {
            $query->where('city_id', $request->city_id);
        });
    }
    if (!empty($request->dist_id)) {
        $clubs->whereHas('clubExts', function ($query) use ($request) {
            $query->where('dist_id', $request->dist_id);
        });
    }
    $clubs = $clubs->paginate(15);
    $info = [];
    foreach ($clubs as $club) {
        if (!isset($club->clubExts)) {
            $provinceName = "";
            $city = "";
            $distName = "";
        } else {
            $provinceName = Region::where('id', $club->clubExts->province_id)->first()->area_name;
            $city = Region::where('id', $club->clubExts->city_id)->first()->area_name;
            $distName = Region::where('id', $club->clubExts->dist_id)->first()->area_name;
        }
        $info[] = [
            'id'            => $club->id,
            'city_name'     => $club->city_name,
            'city_code'     => $club->city_code,
            'club_name'     => $club->club_name,
            'club_code'     => $club->club_code,
            'tel'           => $club->clubExts->tel ?? null,
            'principal'     => $club->clubExts->principal ?? null,
            'province_name' => $provinceName,
            'city'          => $city,
            'dist_name'     => $distName,
            'created_at'    => (string)$club->created_at ?? null,
        ];
    }
    $data = [
        'page'     => $clubs->currentPage(),
        'total'    => $clubs->total(),
        'lastPage' => $clubs->perPage(),
        'rows'     => $info
    ];
    return $this->response('获取成功!', $data, Code::R_OK);
}