Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [S3][ORM] Join tej samej tabeli?
Forum PHP.pl > Forum > PHP > Frameworki
markuz
Cześć,

Potrzebuję zrobić query które wyciągnie mi lokalizacje razem z sublokalizacjami. Tabela location wygląda mniej więcej tak:
Kod
- id
- parent_id (może być NULL)
- name
- slug


Coś takiego mi wyciąga samych parentów (gdzie parent_id = null):

  1. $this->createQueryBuilder('l')
  2. ->select('l.name, l.slug')
  3. ->where('l.parent is null')
  4. ->getQuery()
  5. ->getArrayResult();


Da się w ORM zrobić tak, żeby np. pod kluczem "sublocations" wyciągneło mi dodatkowo lokalizacje gdzie sublocation.parent_id = location.id?
Wiem, że mógłbym zrobić foreach i dla każdego wyciągać sub budując tablice ale chciałbym to zrobić "po bożemu" smile.gif
ohm
Da się, robisz po prostu OneToMany i ManyToOne w jednym entity i tyle, reszta kwestia zapytania.
markuz
Mam coś takiego:

  1. /**
  2. * @ORM\ManyToOne(targetEntity="Location", inversedBy="subLocations")
  3. * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
  4. */
  5. private $parent;
  6.  
  7. /**
  8. * @ORM\OneToMany(targetEntity="Location", mappedBy="parent")
  9. */
  10. private $subLocations;


Nie potrafię skleić odpowiedniego zapytania w query builder - jednak poświęciłem dopiero kilkanaście minut na to, jak masz jakąś wskazówkę to chętnie przeczytam smile.gif W przeciwnym wypadku jutro pewnie sam do tego jakoś dojdę.
ohm
Coś w stylu
  1. $this->createQueryBuilder('l')
  2. ->select('l, sl')
  3. ->leftjoin("l.subLocations", "sl")
  4. ->where('l.parent is null')
  5. ->getQuery()
  6. ->getArrayResult();
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.