Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][SF]jak ominąć w zapytaniu doctrine andWhere jeśli coś jest puste?
Forum PHP.pl > Forum > Przedszkole
szypi1989
Witam. Mam formularz zrobiony , w którym wyszukuje auta z baz danych wedłóg kryterium.
Mam takie zapytanie:
  1. $qb = $em->createQueryBuilder();
  2. $qb->select('c')
  3. ->from('SzypiBundle:Cars', 'c')
  4. ->where('c.price >= :pricefrom')
  5. ->andWhere('c.price <= :priceend')
  6. ->andWhere('c.year >= :yearfrom')
  7. ->andWhere('c.year <= :yearto')
  8. ->andwhere('c.enginetype LIKE :enginetype')
  9. ->andwhere('c.model LIKE :model')
  10. ->andwhere('c.mark LIKE :mark')
  11. ->andwhere('c.enginea = :enginea')
  12. ->andwhere('c.engineb = :engineb')
  13. ->setParameters(array('pricefrom' => ($request->request->get('form')['pricefrom']),
  14. 'priceto' => ($request->request->get('form')['priceto']),
  15. 'yearfrom' => ($request->request->get('form')['yearfrom']),
  16. 'yearto' => ($request->request->get('form')['yearto']),));


I teraz pytanie. Jak ominąć jedną z funkcji andWhere jeśli jakaś wartość z formularza jest pusta?
czyli jeśli w formularzu nie jest podany model auta to żeby jakoś ominać tą funkcje:
->andwhere('c.model LIKE :model').
Mam nadzieje, że dobrze wyjaśniłem.
nospor
o IF nie slyszal?

  1. if ($cosTam) {
  2. $qb->andWhere('c.price <= :priceend')
  3. }
  4. if ($cosTamInnego) {
  5. $qb->andwhere('c.enginetype LIKE :enginetype')
  6. }

Itd

Przenosze. Problem z Symfony nie ma zadnego zwiazku

ps: oczywiscie parametry tez masz dodawac do tablicy parametrow w tych samych IFach
szypi1989
ale nie można między zapytaniami andWhere używać warunków? myślałem, że istnieje jakis lepszy sposób niż takie kombinowanie
nospor
Nie
szypi1989
nie można używać wewnątrz tych zapytań instrukcji if . POkazuje się błąd
nospor
No tak, pokazuje ci blad wiec jedyny wniosek jaki jestes w stanie wysnuc, ze nie mozna tego uzywac... Uzywaj moze bardziej wyobrazni, a moze poprostu zrobiles to zle?

Mozna to robic tak jak ci napisalem. Wszyscy tak robia, ja tak robie i kurcze jakos dziala. Pokaz wiec kod, bo ty zrobiles to zle. Nabierz nawyku, ze jak cos poprawiasz to od razu pokazuj swoje wypociny.
szypi1989
Nie jestem taki tępy. Działa ale tylko na skróconym if. Od razu wiedziałem,że nie można tego na pełnym ifie robić.
viking
A chciałeś pełny if do tablicy wrzucić?
szypi1989
nieee a czemu? czytaj powyżej co piszę to będziesz wiedział o co mi biega. To kolega powyżej mi takie rozwiązanie przedstawił.
nospor
Cytat
To kolega powyżej mi takie rozwiązanie przedstawił.
Z toba gorzej jak z dzieckiem.... Jak dziecku powiesz "pokaz kod" to pokaze, ale nie, ty przeciez wieszz lepiej, mimo ze nie ogarniasz podstaw i nadal glosisz swoje herezje :/

Ja ci podalem kod, ktory dziala, niestety ty go zle wstawiles w swoj kod. Ale co zrobiles zle, to bedziemy ci mogli powiedziec dopiero jak pokazesz te swoje wypociny... Ale widze sie wstydzisz i w glebi duszy doskonale zdajesz sobie sprawe, ze zle to zrobiles wiec nadal wolisz mowic, ze to wszystko wina innych.... gorzej jak dziecko.... tongue.gif
szypi1989
Już mam rozwiązanie. Nie chodzi o to , tylko jak pytam się o rozwiązanie to się podaje bardziej konkretne a nie piszę mechanizmy , które nie działają.
Dzięki za pomoc ale bez obrazy. Wstawiłeś rozwiązanie co jest nielogiczne. Ja w samym php już trochę siedzę, a symfony2 faktycznie dopiero uczę się i robię projekt.
Oto rozwiązanie jakby ktoś chciał :
  1. ->where(($request->request->get('form')['model']!=NULL)?'c.model LIKE :model':'c.model != :model')

Na pewno się przyda.
Chociaż wolałem inaczej to zrobić ale niestety , nie znam lepszego wyjścia.
viking
Bo wydawało mi się że przed edycją posta było coś w stylu klucz => if...
szypi1989
Na pewno da się zrobić to inaczej ale szkoda czasu zagłębiać się w ten temat.
nospor
Cytat
Wstawiłeś rozwiązanie co jest nielogiczne.
Masz racje, popelnilem blad na poczatku. Moim bledem bylo zalezenie ze ogarniasz podstawy php. Kazdy, kto by je ogarnial, wiedzial by jak uzyc moje rozwiazanie.

Wg ciebie ogarniasz php i twierdzisz, ze nie musisz sie juz nic wiecej uczyc.... Ten temat pokazuje ze jest inaczej (nie mowie o symfony a o samym php). No ale nic, twoja sprawa. Zycze dalszych sukcesow w pisaniu brzydkich i nie optymalnych kodow jak ten z ostatniego posta smile.gif
szypi1989
NO dobra nie kłóć się zemną. Widzę, że obrażasz się, że wstawiłeś rozwiązanie a ja je podważyłem , bo nie o to mi chodziło i jeszcze wmawiasz mi , że nie ogarniam php. Gdybym nie ogarniał sam nie wymyślił bym powyższego rozwiązania , które i tak mógłbym lepiej zrobić za pomocą innych funkcji symfony2. Dzięki Ci za pomoc ale nie musisz mi wmawiać coś co Chciałem inaczej zrobić. Bardziej optymalnie.
Faktycznie rozwiązanie działa, przeoczyłem jedną rzecz ale nie o to mi chodziło .
nospor
Po setny ci mowie: pokaz jak uzyles mojego rozwiazania a wytlumacze ci co zrobiles zle
Ale nie chcesz tego zrobic bo wiesz, iz oskarzyles mnie nieslusznie i boisz sie do tego przyznac. Ja naprawde jestem otwarty na dyskusje a nie na bezczelne klamstwa smile.gif

Twoje rozwiazanie jest beznadziejne bo niewazne czy user szuka po model czy nie to ty i tak walisz warunek na model w zapytaniu przez co niepotrzebnie obciazasz baze. I wlasnie dlatego, ze wymysliles to rozwiazanie to pokazujesz jaka jeszcze podtawowa wiedze masz. Jakbys mial lepsza wiedze, to sam bys wiedzial ze to jest do bani smile.gif
szypi1989
No dobra sorki. Faktycznie Twoje rozwiązanie działa. To ,że te rozwiązanie jest do bani to ja wiem.

Po prostu zamiast :
$qb->andWhere('c.price <= :priceend')
wstawiłęm samo andWhere('c.price <= :priceend')
Zapomniałem o " $qb"
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-2025 Invision Power Services, Inc.