Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana] 3.1 ORM _has_many i pobieranie danych w kilku tabel (mnie-więcej rozwiązany))
Forum PHP.pl > Forum > PHP > Frameworki
Kedan
Witam.

Mam model kategorii:
  1. class Model_Category extends ORM {
  2. protected $_has_many = array(
  3. 'news',
  4. 'galleries'
  5. )
  6. }

oraz modele newsów i galerii z odpowiednio ustawionym $_belongs_to. Wszystko działa ok.
Pytanie brzmi, czy można w jakiś sprytny sposób, za pomocą ORMa z modelu kategorii jednocześnie pobrać dane z tabeli newsów i galerii?

edit:
Poradziłem sobie generując zwykłą unię między tabelami. Niemniej nadal zastanawia mnie czy można to rozwiązać korzystając z ORM...
lukaskolista
  1. <?php
  2. $category = ORM::factory('category')
  3. ->with('news')
  4. ->with('galleries')
  5. ->find($category_id);
  6.  
  7. foreach ($category->news->find_all() as $news) {
  8. echo $news->title;
  9. }
  10.  
  11. foreach ($category->galleries->find_all() as $gallery) {
  12. echo $gallery->name;
  13. }
  14. ?>
phpion
@lukaskolista:
Czy with() w K3 na pewno działa tak jak piszesz? W K2 działało tylko "w drugą stronę" tj. dołączało rekordy poprzez JOIN. Można było np. dołączyć województwo do miasta, natomiast pobranie listy województw, a następnie miast do nich nie współpracowało z with(). Należało robić to w pętli generując przy tym N+1 zapytań. Pytam z ciekawości bo K3 nie używałem, a jeśli jest jak piszesz (czyli w teorii powinno wygenerować 3 zapytania) to jest to dość ciekawy ficzer.

PS: W K2 powyższy kod (po wywaleniu with()) utworzy 2*N+1 zapytań - troszkę dużo wink.gif
lukaskolista
jestem w 100% pewny, w ko3 ORM tak wlasnie dziala
Kedan
Rzeczywiście działa. Sęk w tym, że newsy i galerie nadal pobierane są osobno, więc gdybym chciał je "przemieszać" i posortować np po dacie utworzenia, muszę to zrobić w php. Tworząc unię załatwiam wszystko jednym zapytaniem sql.
lukaskolista
ORM poza ulatwieniami ma sporo ograniczen, zaawansowane zapytania SQL tworzy sie przez query builder lub w czystym SQL
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.