cityRepository = $cityRepository; $this->countryRepository = $countryRepository; $this->districtRepository = $districtRepository; $this->neighborhoodRepository = $neighborhoodRepository; $this->villageRepository = $villageRepository; } public function getCountries() { if ($this->request->id) return $this->countryRepository->getModel()->find($this->request->id); else { $query = $this->countryRepository->getModel(); return $this->queryOrder($query, $this->countryRepository); } } public function getCities() { if ($this->request->id) { $id = explode(',', $this->request->id); $query = $this->cityRepository->getModel()->whereIn('parent_country_id', $id); return $this->queryOrder($query, $this->cityRepository); } } public function getDistricts() { if ($this->request->id) { $id = explode(',', $this->request->id); $query = $this->districtRepository->getModel()->whereIn('parent_city_id', $id); return $this->queryOrder($query, $this->districtRepository); } } public function getNeighborhoods() { if ($this->request->id) { $id = explode(',', $this->request->id); $query = $this->neighborhoodRepository->getModel()->whereIn('parent_district_id', $id); return $this->queryOrder($query, $this->neighborhoodRepository); } } public function getVillage() { if ($this->request->id) { $id = explode(',', $this->request->id); $query = $this->villageRepository->getModel()->whereIn('parent_neighborhood_id', $id); return $this->queryOrder($query, $this->villageRepository); } } public function getCity() { if ($this->request->name) { $slug = Str::slug($this->request->name, '_'); if ($city = $this->cityRepository->getModel()->newQuery()->where('slug', 'LIKE', $slug . '%')->first()) { return ['success' => true, 'city' => $city]; } else { return ['success' => false]; } } } public function queryOrder($query, $repository) { $sorting_type = setting_value('visiosoft.module.location::sorting_type'); $sorting_column = setting_value('visiosoft.module.location::sorting_column'); if ($repository->getModel()->isTranslatedAttribute($sorting_column)) { return $repository->getByEntryIDsAndOrderByTransCol( $query->pluck('id')->all(), $sorting_column, $sorting_type ); } return $query->orderBy($sorting_column, $sorting_type)->get(); } public function findLocation() { try { $validator = Validator::make(request()->all(), [ 'type' => [ 'required', Rule::in(['countries', 'cities', 'districts', 'neighborhoods', 'village']) ], 'id' => 'required|exists:location_' . request()->type, ]); if ($validator->fails()) { throw new \Exception($validator->messages()->first()); } $dBName = 'location_' . request()->type; $location = DB::table($dBName) ->join( $dBName . '_translations as location_trans', $dBName . '.id', '=', 'location_trans.entry_id' ) ->where($dBName . '.id', request()->id) ->first(); return [ 'success' => true, 'data' => $location ]; } catch (\Exception $e) { return [ 'success' => false, 'msg' => $e->getMessage() ]; } } }