![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
witam
napisałem zapytanie, którego Propel sam nie wygeneruje. łączone są w nim 3 tabele. chciałbym teraz pobrać dane z dwóch tabel i w widoku mieć dostęp do tych danych poprzez odpowiedni model (odpowiedni dla tych tabel). można to jakoś zamienić na obiekty? chciałbym uzyskać coś takiego co zwraca metoda doSelectJoinAll. nie mogę jednak połapać się jak takie coś samemu zmontować. -------------------- aplikacje internetowe | Symfony
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli zmontowałeś jakies zapytanie, które zwraca Ci jakiś RecordSet a chciałbyś to mieć w obiektach to możesz pokombinować z
BookPeer::populateObjects(RecordSet $rs) (tu przykład dla encji Book) |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
dobrze powiedziałeś: kombinować:)
bo... metoda populateObjects przyjmuje tylko jeden parametr ResultSet $rs. a jak w select podam kolumny z kilku tabel to nie będzie wiedział, które to są kolumny danej tabeli. ale dzięki za podpowiedź, bo przecież można wykorzystać kod metody populateObjects odpowiednio go modyfikując:) kombinuje dalej:) EDIT: no i wykombinowałem:) dzięki mike Ten post edytował AxZx 15.10.2008, 14:08:30 -------------------- aplikacje internetowe | Symfony
|
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Pokaż jak. Nie mam możliwości sprawdzenia teraz a mnie zaciekawiło.
Podejrzewam, że można to zrobić w bardzo prosty sposób. Coś w stylu: Kod books foreach (recordSet as set) { book = Book::populateObject(set); book->setAuthor(Author::opulateObject(set)); books[] = book } Kurcze, żebym tylko pamiętał jak to w kodzie wygląda. Czyżby to działało tak:
Lecę na pamięć bo mnie ciekawość zżera ![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Metoda hydrate ma drugi (opcjonalny) parametr $startcol, który określa numer kolumny od której zacząć tworzenie obiektu.
Czyli pobierając w jednym RS dwie tabele author i book (w tej kolejności) można zrobić np: $book->hydrate($rs, AuthorPeer::NUM_COLUMNS + 1); Warunek jest jeden: trzeba pobrać kolumny w takiej kolejności jak w tabeli. Piszę z pamięci, ale kiedyś miałem dosyć zagmatwaną sytuację przy tworzeniu obiektów i właśnie w ten sposób "powoływałem" je do życia. //EDIT @mike - mogę się mylić, ale z tego co pamietam to po drodze trzeba jeszcze "wyzerować" rs tak żeby znów zaczął od pierwszego wiersza - coś mi tak świta. Także w twoim przypadku kod nie zadziała bo trzeba wskazać startcol i chyba wyzerować $rs. Ten post edytował athabus 15.10.2008, 15:19:44 |
|
|
![]()
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Warunek jest jeden: trzeba pobrać kolumny w takiej kolejności jak w tabeli. Nom. To jest spora niedogodność. W przeciwnym wypadku trzeba przepisywać metodę hydrate(). Da się ją napisać chyba tak, żeby sama szukała odpowiednich pól w wierszu.@mike - mogę się mylić, ale z tego co pamietam to po drodze trzeba jeszcze "wyzerować" rs tak żeby znów zaczął od pierwszego wiersza - coś mi tak świta. Także w twoim przypadku kod nie zadziała bo trzeba wskazać startcol i chyba wyzerować $rs. No właśnie raczej nie trzeba zerować. No jak lecisz po wynikach to od razu możesz z jednego wiersza wyciągnąć dwa obiekty. Nie ma potrzeby latać dwa razy po wynikach.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
hmm ja to zrobiłem tak:
w widoku dostęp do tych obiektów mam tak:
-------------------- aplikacje internetowe | Symfony
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Faktycznie mike masz racje - nie spojrzałem dokładnie w twój kod - lecisz jedną pętlą wszystko więc nie trzeba zerować $rs. Także jeśli dasz $startcolumn to powinno działać.
Ten post edytował athabus 15.10.2008, 16:03:04 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 14:55 |