public function search(Request $request) { $params = Input::all(); //print_r($params) . '<br /><br />'; $request->flash(); $car_model_id = array(); if (old('car_brand_id')) { if (is_numeric(old('car_brand_id')) && old('car_brand_id') > 0) { $car_models = CarModel::where('car_brand_id', old('car_brand_id'))->orderBy('car_model_name', 'asc')->get(); if (!$car_models->isEmpty()) { $car_model_id = array(0 => 'Select Car Model'); foreach ($car_models as $k => $v) { $car_model_id[$v->car_model_id] = $v->car_model_name; } } } } // echo 'category_slug: ' . $request->category_slug . '<br />'; // echo 'location_slug: ' . $request->location_slug . '<br />'; // echo 'search_text: ' . $request->search_text . '<br />'; $breadcrump = array(); //check if category selected $category_slug = ''; if (isset($request->category_slug)) { $category_slug = Util::sanitize($request->category_slug); } $cid = 0; if (!empty($category_slug)) { $cid = $this->category->getCategoryIdByFullPath($category_slug); if (empty($cid)) { abort(404); } } //if category selected get info, get childs and generate url and breadcrump $clist = array(); $all_category_childs = array(); if ($cid > 0) { $params['cid'] = $cid; $selected_category_info = Category::where('category_id', $cid)->first(); $clist = $this->category->getOneLevel($cid); foreach ($clist as $k => &$v) { $category_url_params = array(); $category_url_params[] = $this->category->getCategoryFullPathById($v->category_id); if (session()->has('location_slug')) { $category_url_params[] = 'l-' . session()->get('location_slug'); } if (!empty($category_url_params)) { $v->category_url = Util::buildUrl($category_url_params); } } $breadcrump_data = $this->category->getParentsByIdFlat($cid); if (!empty($breadcrump_data)) { foreach ($breadcrump_data as $k => &$v) { $category_url_params = array(); $category_url_params[] = $this->category->getCategoryFullPathById($v['category_id']); if (session()->has('location_slug')) { $category_url_params[] = 'l-' . session()->get('location_slug'); } if (!empty($category_url_params)) { $v['category_url'] = Util::buildUrl($category_url_params); } } //category part of breadcrump $breadcrump['c'] = array_reverse($breadcrump_data); } $acc = $this->category->getAllHierarhyFlat($cid); if (!empty($acc)) { foreach ($acc as $ak => $av) { $all_category_childs[] = $av['cid']; } } $all_category_childs[] = $cid; } //check for location selection $location_slug = ''; if (isset($request->location_slug)) { $location_slug = Util::sanitize($request->location_slug); } $lid = 0; if (!empty($location_slug)) { $lid = $this->location->getIdBySlug($location_slug); if (empty($lid)) { abort(404); } $params['lid'] = $lid; } //check for search text $search_text = ''; $search_text_tmp = ''; if (isset($request->search_text)) { $search_text_tmp = Util::sanitize($request->search_text); } if (!empty($search_text_tmp) && mb_strlen($search_text_tmp, 'utf-8') > 3) { $search_text = preg_replace('/-/', ' ', $search_text_tmp); $params['search_text'] = $search_text; } /* * init where vars */ $where = []; $order = []; $limit = 0; $orderRaw = ''; $whereIn = []; $whereRaw = []; $paginate = 0; $page = 1; /* * get common params and set them in where array */ if (isset($params['condition_id']) && !empty($params['condition_id']) && is_array($params['condition_id'])) { $whereIn['condition_id'] = $params['condition_id']; } if (isset($params['type_id']) && !empty($params['type_id']) && is_array($params['type_id'])) { $whereIn['type_id'] = $params['type_id']; } if (isset($params['price_from']) && is_numeric($params['price_from']) && $params['price_from'] > 0) { $where['ad_price'] = ['>=', $params['price_from']]; } if (isset($params['price_to']) && is_numeric($params['price_to']) && $params['price_to'] > 0) { $where['ad_price'] = ['<=', $params['price_to']]; } //type 2 filters - real estates if (isset($params['estate_type_id']) && !empty($params['estate_type_id']) && is_array($params['estate_type_id'])) { $whereIn['estate_type_id'] = $params['estate_type_id']; } if (isset($params['estate_sq_m_from']) && is_numeric($params['estate_sq_m_from']) && $params['estate_sq_m_from'] > 0) { $where['estate_sq_m'] = ['>=', $params['estate_sq_m_from']]; } if (isset($params['estate_sq_m_to']) && is_numeric($params['estate_sq_m_to']) && $params['estate_sq_m_to'] > 0) { $where['estate_sq_m'] = ['<=', $params['estate_sq_m_to']]; } if (isset($params['estate_year_from']) && is_numeric($params['estate_year_from']) && $params['estate_year_from'] > 0) { $where['estate_year'] = ['>=', $params['estate_year_from']]; } if (isset($params['estate_year_to']) && is_numeric($params['estate_year_to']) && $params['estate_year_to'] > 0) { $where['estate_year'] = ['<=', $params['estate_year_to']]; } if (isset($params['estate_construction_type_id']) && !empty($params['estate_construction_type_id']) && is_array($params['estate_construction_type_id'])) { $whereIn['estate_construction_type_id'] = $params['estate_construction_type_id']; } if (isset($params['estate_heating_type_id']) && !empty($params['estate_heating_type_id']) && is_array($params['estate_heating_type_id'])) { $whereIn['estate_heating_type_id'] = $params['estate_heating_type_id']; } if (isset($params['estate_floor_from']) && is_numeric($params['estate_floor_from']) && $params['estate_floor_from'] > 0) { $where['estate_floor'] = ['>=', $params['estate_floor_from']]; } if (isset($params['estate_floor_to']) && is_numeric($params['estate_floor_to']) && $params['estate_floor_to'] > 0) { $where['estate_floor'] = ['<=', $params['estate_floor_to']]; } if (isset($params['estate_num_floors_in_building']) && is_numeric($params['estate_num_floors_in_building']) && $params['estate_num_floors_in_building'] > 0) { $where['estate_num_floors_in_building'] = $params['estate_num_floors_in_building']; } if (isset($params['estate_furnishing_type_id']) && !empty($params['estate_furnishing_type_id']) && is_array($params['estate_furnishing_type_id'])) { $whereIn['estate_furnishing_type_id'] = $params['estate_furnishing_type_id']; } //type 3 filters - cars if (isset($params['car_engine_id']) && !empty($params['car_engine_id']) && is_array($params['car_engine_id'])) { $whereIn['car_engine_id'] = $params['car_engine_id']; } if (isset($params['car_brand_id']) && is_numeric($params['car_brand_id']) && $params['car_brand_id'] > 0) { $where['car_brand_id'] = $params['car_brand_id']; } if (isset($params['car_model_id']) && is_numeric($params['car_model_id']) && $params['car_model_id'] > 0) { $where['car_model_id'] = $params['car_model_id']; } if (isset($params['car_transmission_id']) && !empty($params['car_transmission_id']) && is_array($params['car_transmission_id'])) { $whereIn['car_transmission_id'] = $params['car_transmission_id']; } if (isset($params['car_modification_id']) && !empty($params['car_modification_id']) && is_array($params['car_modification_id'])) { $whereIn['car_modification_id'] = $params['car_modification_id']; } if (isset($params['car_year_from']) && is_numeric($params['car_year_from']) && $params['car_year_from'] > 0) { $where['car_year'] = ['>=', $params['car_year_from']]; } if (isset($params['car_year_to']) && is_numeric($params['car_year_to']) && $params['car_year_to'] > 0) { $where['car_year'] = ['<=', $params['car_year_to']]; } if (isset($params['car_kilometeres_from']) && is_numeric($params['car_kilometeres_from']) && $params['car_kilometeres_from'] > 0) { $where['car_kilometeres'] = ['>=', $params['car_kilometeres_from']]; } if (isset($params['car_kilometeres_to']) && is_numeric($params['car_kilometeres_to']) && $params['car_kilometeres_to'] > 0) { $where['car_kilometeres'] = ['<=', $params['car_kilometeres_to']]; } if (isset($params['car_condition_id']) && !empty($params['car_condition_id']) && is_array($params['car_condition_id'])) { $whereIn['car_condition_id'] = $params['car_condition_id']; } /* * get promo ads */ $where['ad_promo'] = 1; $where['ad_active'] = 1; if ($lid > 0) { $where['ad.location_id'] = $lid; } if ($cid > 0) { $whereIn['category_id'] = $all_category_childs; } if (!empty($search_text)) { $whereRaw['match(ad_title, ad_description) against(?)'] = [$search_text]; } $orderRaw = 'rand()'; $limit = 4; $promo_ad_list = $this->ad->getAdList($where, $order, $limit, $orderRaw, $whereIn, $whereRaw, $paginate); /* * get normal ads */ $where['ad_promo'] = 0; $limit = 0; $orderRaw = ''; $order = ['ad_publish_date' => 'desc']; $paginate = 4; if (isset($params['page']) && is_numeric($params['page'])) { $page = $params['page']; } $ad_list = $this->ad->getAdList($where, $order, $limit, $orderRaw, $whereIn, $whereRaw, $paginate, $page); // debug db queries // dd(DB::getQueryLog()); $view_params = ['c' => $this->category->getAllHierarhy(), 'l' => $this->location->getAllHierarhy(), 'params' => $params, 'cid' => $cid, 'lid' => $lid, 'search_text' => $search_text, 'clist' => $clist, 'breadcrump' => $breadcrump, 'promo_ad_list' => $promo_ad_list, 'ad_list' => $ad_list, 'at' => AdType::all(), 'ac' => AdCondition::all(), 'estate_construction_type' => EstateConstructionType::all(), 'estate_furnishing_type' => EstateFurnishingType::all(), 'estate_heating_type' => EstateHeatingType::all(), 'estate_type' => EstateType::all(), 'car_brand_id' => CarBrand::all(), 'car_model_id' => $car_model_id, 'car_engine_id' => CarEngine::all(), 'car_transmission_id' => CarTransmission::all(), 'car_condition_id' => CarCondition::all(), 'car_modification_id' => CarModification::all()]; if ($cid > 0) { $view_params['selected_category_info'] = $selected_category_info; } return view('ad.search', $view_params); }