Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Kohana] 3.1 ORM _has_many i pobieranie danych w kilku tabel (mnie-więcej rozwiązany))
Kedan
post
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 1
Dołączył: 20.07.2007

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


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...

Ten post edytował Kedan 28.03.2011, 17:15:45
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
lukaskolista
post
Post #2





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


  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. ?>
Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@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 (IMG:style_emoticons/default/wink.gif)

Ten post edytował phpion 30.03.2011, 07:57:49
Go to the top of the page
+Quote Post
lukaskolista
post
Post #4





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


jestem w 100% pewny, w ko3 ORM tak wlasnie dziala
Go to the top of the page
+Quote Post
Kedan
post
Post #5





Grupa: Zarejestrowani
Postów: 53
Pomógł: 1
Dołączył: 20.07.2007

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


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.
Go to the top of the page
+Quote Post
lukaskolista
post
Post #6





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


ORM poza ulatwieniami ma sporo ograniczen, zaawansowane zapytania SQL tworzy sie przez query builder lub w czystym SQL
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 27.12.2025 - 03:14