| Version 8 (modified by , 4 months ago) ( diff ) |
|---|
Пребарување на дестинации
Актери
Регистриран корисник
Реализација
- Внесување на критериуми за пребарување. Корисникот пристапува до функцијата за пребарување на дестинации, ги внесува своите преференции:
- Тип на место (на пример, море, планина)
- Посакувана сезона (пролет, лето, есен, зима)
- Приоритет (популарност од 1 до 10)
- Корисникот има можност да ги филтрира резултатите според горенаведените преференци.
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'));
}
Note:
See TracWiki
for help on using the wiki.
