== Пребарување на дестинации\\ === Актери Регистриран корисник === Реализација 1. Внесување на критериуми за пребарување. Корисникот пристапува до функцијата за пребарување на дестинации, ги внесува своите преференции: * Тип на место (на пример, море, планина) * Посакувана сезона (пролет, лето, есен, зима) * Приоритет (популарност од 1 до 10) 2. Корисникот има можност да ги филтрира резултатите според горенаведените преференци. {{{ SELECT DISTINCT d.* FROM DESTINACII d LEFT JOIN RECENZII r ON d.idDest = r.idDest WHERE (:tip IS NULL OR d.tipoviMesta ILIKE CONCAT('%', :tip, '%')) AND (:sezona IS NULL OR d.preporachanaSezona ILIKE CONCAT('%', :sezona, '%')) AND ( :prioritet_min IS NULL OR :prioritet_max IS NULL OR d.idTag IN ( SELECT idTag FROM TAGOVI WHERE tagOznaka::int BETWEEN :prioritet_min AND :prioritet_max ) ) }}} {{{ public function index(Request $request) { $tip = $request->input('tipovimesta'); $sezona = $request->input('preporachanasezona'); $popularnost = $request->input('popularnost'); $prioritet_min = null; $prioritet_max = null; if ($popularnost && str_contains($popularnost, '-')) { [$prioritet_min, $prioritet_max] = explode('-', $popularnost); } $sql = " SELECT DISTINCT d.* FROM DESTINACII d LEFT JOIN RECENZII r ON d.idDest = r.idDest WHERE (:tip IS NULL OR d.tipoviMesta ILIKE CONCAT('%', :tip, '%')) AND (:sezona IS NULL OR d.preporachanaSezona ILIKE CONCAT('%', :sezona, '%')) AND ( :prioritet_min IS NULL OR :prioritet_max IS NULL OR d.idTag IN ( SELECT idTag FROM TAGOVI WHERE tagOznaka::int BETWEEN :prioritet_min AND :prioritet_max ) ) "; $destinacii = DB::select($sql, [ 'tip' => $tip !== 'any' ? $tip : null, 'sezona' => $sezona !== 'any' ? $sezona : null, 'prioritet_min' => $prioritet_min, 'prioritet_max' => $prioritet_max, ]); return view('destinations.index', compact('destinacii')); } }}}