Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Laravel]filtr bazy jako przycisk
Puchatek320
post 8.06.2020, 12:38:33
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 4.11.2019

Ostrzeżenie: (0%)
-----


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?


Ten post edytował Puchatek320 8.06.2020, 12:38:20
Go to the top of the page
+Quote Post
viking
post 8.06.2020, 13:20:36
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


https://www.hackdoor.io/articles/lOQ9MvQB/d...ravel-pipelines

Dodatkowo $request->filled()


--------------------
Go to the top of the page
+Quote Post
Puchatek320
post 8.06.2020, 15:07:05
Post #3





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 4.11.2019

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Puchatek320 8.06.2020, 15:40:44
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 09:28