Wpis z mikrobloga

Piszę apliakcje w Symfony.

Jej wycinek wygląda tak, że są Kategorie produktów, które mają pole "parent". Pole to jest połączone relacją ManyToOne po polu id z inną Kategorią.

Nie potrafię rozkminić w Doctrine zapytania, które poda mi wszystkie kategorie, które mają w polu "parent" Kategorię o np. id=1.

Czyli jestem na stronie Kategoria 1 i chce wyświetlić wszystkie kategorie jej podlegające.

Jeśli nie muszę to staram się unikać DQL i wykorzystywać metody dostępne z poziomu repozytorium.

Czy jest sposób, abym tak określił kryteria wyszukania, żeby pobrać tylko te kategorie?
Nie chcę pobierać wszystkich i filtrować, bo za dużo czasu to zajmie.

#symfony #php #bazydanych #programowanie #pytanie
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Mores: jedynie to ->findby(array('parent' => 1)) ale to Ci zwróci tylko bezpośrednich potomków

jak chcesz potomków potomków również, to bez bardziej skompilowanych zapytań się nie obejdzie

poszukaj w google:
symfony tree
managing hierarchical data in mysql
  • Odpowiedz
powinno się zawsze korzystać z DQL jak tylko się da, bo repozytoria są strasznie wolne


@Jurigag: Teraz mówisz? A zaczynałem się dobrze z nimi dogadywać...
W sumie wydają się dość wygodne i całkiem przyjemne.
  • Odpowiedz
@Jurigag: Ale one zwracają encje, a zwykłe zapytanie nie zwróci przypadkiem tablicy?
Wtedy cały ORM przestaje mieć chyba sens tak z grubsza, bo szybciej i łatwiej mi napisać w sumie SQL niż bawić się w te ichnie DQL czy cokolwiek.
  • Odpowiedz
@anonim1133: zwróci encje :P przecież właśnie po to jest doctrine i dql żeby zwracało obiekty ^^ możesz dodać specjalną flagę żeby zwracało tablicę - przydatne jak mamy tylko to wyświetlać i nie zmieniać nic czyli np do widoków jak mamy to tylko wyświetlić to niepotrzebne nam obiekty bo np w twigu i do obiektu i do tablicy tak samo się odwołuje po kropce, w dodatku hydracja czyli właśnie zmienianie tablicy
  • Odpowiedz
to wyłączenie hydracji sporo dało i dodanie partiali i napisanie zapytania w dql


@Jurigag: Brzmi mądrze, ale ani słowa :D
Cóż, wszystko przyjdzie z czasem. Będę musiał też zrewidować swoją wiedzę na temat dql w takim razie ;)
  • Odpowiedz
@anonim1133: jeszcze zawsze możesz korzystać z queryBuildera, powinien byś szybszy niż repozytorium ;p partiale są potrzebne jak chce się załadować informacje z obiektu który ma relacje z innymi tj np mam obiekt zamówienie i obiekt produkt, i chcę znać tylko nazwę produktu z mego zamówienia to wtedy mogę zastosować partial i nie muszę pobierać wszystkiego z zamówienia i nadal mam normalne obiekty np lub tablice
  • Odpowiedz
@Jurigag: Wykop uczy, wykop bawi!
Na razie... Używam wszystkiego po trochu. Surowy SQL, queryBuilder, repozytoria. Jak mi wygodniej, w zasadzie odkrywam kolejno, zgodnie z zapotrzebowaniem.
  • Odpowiedz