Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Laravel]filtr bazy jako przycisk
Forum PHP.pl > Forum > Przedszkole
Puchatek320
Cześć,
Chciałbym zapytać w jaki sposób robi się przyciski do filtrowania bazy danych tak jak np. na Youtube?

Powiedzmy że mamy 3 filtry
czas
jakość
trafność

  1. Route::get('/search/', [
  2. 'uses' => 'SitesController@search',
  3. 'as' => 'SitesController.search'
  4. ]);
  5.  
  6.  
  7.  
  8. kontroler
  9.  
  10. public function search(Request $request)
  11. {
  12.  
  13. $search = $request -> input('search');
  14.  
  15. $films = DB::table('films')
  16. ->where('name', 'like', '%'.$search.'%')
  17. ->paginate(28);
  18.  
  19.  
  20. return view('sites.search', compact('films', 'search'));
  21. }
  22.  

Wiem w jaki sposób zrobić zapytanie tylko nie wiem w jaki sposób przekazać dodatkowe parametry oprócz wyszukiwanego wyrazu.
Obecnie url wygląda w ten sposób "localhost/test/search?search=w" i teraz po kliknięciu w czas chyba powinno być "localhost/test/search?search=w?czas" tak samo jeśli wybierzemy jakość itp tylko nie wiem jako to osiągnąć w jaki sposób napisać route?

Mam jeszcze pytanie co do paginowania stron mianowicie wyświetlam paginację tylko nie chciał bym żeby wszystkie strony były wyświetlane od razu 1, 2, 3, 4, 5, itp tylko 1, 2 na stronie https://laravel.com/docs/master/pagination znalazłem {{ $users->onEachSide(5)->links() }} i według tego jeśli ustawię 2 powinno być ok mimo to nadal wyświetla 1, 2, 3, 4, 5, może ktoś wie jak rozwiązać przy okazji ten problem?




Okey udało mi się zrobić to formularzem tylko tak tutaj pojawia się problem i pytanie o realizację

mam trzy filtry i pod filtry
czas
30 min
50 min
60 min

jakość
240
320
720

trafność
data
ocena
długość

zrobiłem filtr tego co dostaje z forma i robię zapytanie

  1. if($sort === 'rating'){
  2.  
  3. $films = DB::table('films')
  4. ->where('name', 'like', '%'.$search.'%')
  5. ->orderBy('rating', 'desc')
  6. ->paginate(28);
  7.  
  8. }

i tutaj przechodzimy do pytania ponieważ obecnie działa tylko 1 z 3 filtrów na raz chciałbym zrobić aby była możliwość wyboru wszystkich 3 wiec wpadłem na pomysł że zrobię to jak do tej pory czyli

  1. if(!empty($time) && !empty($quality)){
  2.  
  3. }

tylko tutaj pojawia się problem ponieważ jest 6 podkategorii do tego czyli musiał bym zrobić każdą możliwą opcję zapytania czy jest jakiś sposób jak to obejść? Obstawiam że niektórzy z was pracują nad zaawansowanymi filtrami kategorii dla sklepów itp jak to się realizuję tam?
viking
https://www.hackdoor.io/articles/lOQ9MvQB/d...ravel-pipelines

Dodatkowo $request->filled()
Puchatek320
Tak to chyba jest to czego szukam w jaki sposób zrobić zapytanie przez pipeline?



  1. $films = films::query();
  2.  
  3. if (request()->has('time=3-10min')) {
  4. $films ->where('duration', '<=', '600');
  5. }
  6. $films = $films->paginate(28);
  7.  

Jeśli robię w ten sposób to nic sie nie zmienia mimo że w pasku adresu jest &time=3-10min jeśli za to zmienię na samo time to wyszukuje jak sobie z tym poradzić tak aby to działało?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.