![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 19.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Walczę z projektem pierwszy raz używając mvc. Dużo udało mi się już zwalczyć, ale teraz mam problem próbuję zrobić coś w stylu dwóch zależnych od siebie zapytań do sqla. Problem w tym, że kiedy ustawiam model na to drugie - to już wychodzi mi z pierwszego. Z resztą.. oto cały kod:
Niestety zawsze widać tylko 1 rekord.. mimo że $this->model->listRozWiersz2($id, $wiersz1["id_rozmiarw"]); powinno wyświetlać ich więcej. Przypuszczam, że trzeba zakombinować coś w klasie model.. ale sam na chwile obecną chyba sobie z tym nie poradzę - dlatego proszę o podpowiedź. Przy okazji - są jakieś alternatywy dla MVC? Bo na dłuższą metę to nie wiem czy się z nim dogadam - szczególnie ciężko mi się przyzwyczaić do tych zapytań w Modelu.. Pozdrawiam i jeszcze raz bardzo proszę o podpowiedź. Jacek |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Daj jakiś bardziej reprezentatywny kod, bo ciężko coś wywnioskować z tego co wkleiłeś.
Po co to $i++? Po za tym 2 razy zapełniasz tablicę $rozmiary, a na pewno nie używasz jej za pierwszym razem. edit: Cytat Przy okazji - są jakieś alternatywy dla MVC? Owszem, są. Poczytaj o frameworku PRADO i jaka jest jego zasada działania. Ten post edytował LBO 22.06.2007, 13:18:34 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 19.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Dzięki za reakcję.. Za pomocą tego $i sprawdzałem ile razy kręci się ta pętla. W tym momencie: $this->model->listRozWiersz1($id); Wywołuję funkcję: function listRozWiersz1($id) { $this->dao->fetch("SELECT ...... ;"); } Liczba rekordów w tym zapytaniu jest > 1 natomiast ten while: while ( $wiersz1=$this->model->getProduct() ) { .... przekręca się tylko raz. Wydaje mi się że przyczną tego jest ustawienie w nim: $this->model->listRozWiersz2($id, $wiersz1["id_rozmiarw"]); ponieważ listRozWiersz2 to znowu $this->dao->fetch("SELECT ...... ;"); ... Nie rozumiem dlaczego pętla obraca się raz skoro rekordów wynikających z zapytania jest więcej.. Co jeszcze wkleić? Pozdrawiam, Jacek |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Sorry, ale coraz mniej z Tego rozumiem.
Nie powiem Ci dokładnie co jest nie tak - przyczyną są dwa główne problemy, piszesz tak jakbym znał Twoja implementację i używasz najgorszego możliwego nazewnictwa: zróbTo1(), zróbTo2() etc. Na pewno wiem, że coś nie tak w samym modelu jest - źle agreguje wyniki zapytania. Ten post edytował LBO 22.06.2007, 13:45:00 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 19.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
OK, teraz postaram się kompleksowo:
Jeżeli zrobię tak (pominę drugie zapytanie):
To wtedy {$rozmiary} Array (2) . Czyli jest OK. Natomiast Kiedy odhaszuje drugie wywołanie modelu i while:
I teraz już: {$rozmiary} Array (1) Funkcje z klasy Model:
W klasie Connect (obiekt dao) mam:
Teraz jaśniej? Nie wiem nawet co jeszcze mógłbym powklejać.. Pozdrawiam, Jacek |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
No i wszystko jasne. To wina sposobu w jakim pracujesz na $dao.
Pobierasz dane metodą
a do przechodzenia po kolejnych rekordach
i wszystko super, tylko, że metody
i
Robia to samo na tej samej instancji $dao. Innymi słowy przechodząc po $dao w pierwszej pętli - zawierającego rekordy z listRozWiersz1() - modyfikujesz go, tak, że zawiera całkiem inny zestaw rekordów (pobranych w listRozWiersz2()). |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 19.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
OK, tego się spodziewałem że coś sobie gdzieś nadpisuję - a mogę prosić jakąś podpowiedź jak temu zapobiec?
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Najlepiej - moim daniem - stworzyć klasę specjalnie do trzymania rekordów. Klasa taka (Rowset) była by wracana jako wynik np. listRozWiersz1(). Jakbyś odpowiednio zbudował, to mógłbyś osiągnąć taki efekt:
Bardzo ładnie pod tym względem prezentuje się komponent Zend_Db_Table z Zend Framework'a. Ten post edytował LBO 22.06.2007, 14:40:35 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 19.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
Niestety nowa klasa to jak dla mnie za dużo na raz
![]() Dorobiłem sobie do klasy z której jest $dao takie coś:
No i później już:
Wiem że to pewnie nie bardzo obiektowe i w ogóle do.... ![]() ![]() A co do PRADO - wolałbym coś mniej 'automatycznego' - tak żebym mógł sobie dalej używać QuickForm'a i Smarty - chodzi mi tylko o jakiś sprytny przykład poskładania tego wszystkiego w klasy. Pozdrawiam i bardzo dziękuję za podpowiedzi, Jacek |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.06.2025 - 01:06 |