wiki:PrebaruvanjeDestinacii

Version 8 (modified by 223270, 3 days ago) ( diff )

--

Пребарување на дестинации

Актери

Регистриран корисник

Реализација

  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'));
}

Note: See TracWiki for help on using the wiki.