Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] nested foreach
voytasf
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 9.11.2008

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


Witam
Nie mogę sobie poradzić z tym kodem:
  1. <?php
  2. class menuComponents extends sfComponents
  3. {
  4.    public function executeDefault()
  5.    {
  6.        $c = new Criteria();
  7.        $c->add(GrupaPeer::ID_PARENT,0);
  8.          $this->grupy = GrupaPeer::doSelect($c);
  9.          foreach($this->grupy as $grupa)
  10.          {
  11.              $d = new Criteria();
  12.              $d->add(GrupaPeer::ID_PARENT,$grupa->getIDGrupa());
  13.              $this->podgrupy = GrupaPeer::doSelect($d);
  14.          }
  15.    }
  16. }
  17. ?>

template
  1. <ul>
  2.    <?php foreach($grupy as $grupa): ?>
  3.        <li>
  4.        <?php echo link_to($grupa->getNazwaGrupaPl(),"towary/grupa?id=" . $grupa->getIdGrupa()); ?>
  5.        <ul>
  6.            <?php foreach ($podgrupy as $podgrupa): ?>
  7.            <li>
  8.            <?php echo link_to($podgrupa->getNazwaGrupaPl(),"towary/grupa?id=" . $podgrupa->getIdGrupa()); ?>
  9.            </li>
  10.            <?php endforeach ?>
  11.        </ul>
  12.        </li>
  13.    <?php endforeach ?>
  14. </ul>

W wyniku wyświetlają się wszystkie grupy główne (id_parent=0) i w każdej z nich podgrupa ostatniej grupy głównej.
Gdy dam echo w funcji wyświetla ok, przez template jak powyżej.
Go to the top of the page
+Quote Post
smentek
post
Post #2





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


Ojej,.. smile.gif

1. Pobieranie obiektów z bazy danych (nawet mowiac bardziej ogolnie - wykonwywanie jakichkolwiek zapytanian do bazy w jakimkolwiek systemie) w petli niema sesu. To tak jak bys robil zakupy, biegajac miedzy domem a sklepem z kazdym pojedynczo zakupionym towarem..

2. Zapytanie do bazy (najlepiej jedno) tworzsz w pliku akcji komponentu. Wynikiem zapytania jest obiekt lub tablica obiektow.
W templecie umieszczasz petle w ktorej wyswietlasz wyniki obiekt po obiekcie poprzez petle foreach.

3. Wazne jest utworzenie prawidlowego MODELU. Jezeli masz Grupy i Podgrupy to pownienes miec 2 tabele w bazie i 2 odpowiedajace im obiekty,


4. Odnosnie braku wyswietlania podgrup:

  1. <?php
  2. $this->podgrupy = GrupaPeer::doSelect($d);
  3. ?>


Zmienna $this->podgrupy jest nadpisywana przy kazdej iteracji.

"Prawidlowe" rozwiazanie to:

  1. <?php
  2. //Tablica na obiekty z zapytan
  3. $podgrupyArray = array();
  4. //Przypisujemy obiekty do tablicy
  5. $podgrupyArray[] =  GrupaPeer::doSelect($d);
  6. //Wysylamy do template
  7. $this->podgrupyArray = $podgrupyArray ;
  8. ?>


Ten post edytował smentek 5.12.2008, 23:07:21


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




Może nieco odejdę od tematu ale:

Cytat(smentek @ 6.12.2008, 01:05:01 ) *
3. Wazne jest utworzenie prawidlowego MODELU. Jezeli masz Grupy i Podgrupy to pownienes miec 2 tabele w bazie i 2 odpowiedajace im obiekty,

A co w przypadku gdy będzie konieczność dołożenia 3-go poziomu zagłębień? Dodasz nową tabelę? Moim zdaniem rozwiązanie problem drzewiastego menu z jedną tabelą, w której klucz obcy wskazuje na nią samą, jest najlepszym pomysłem.
Go to the top of the page
+Quote Post
smentek
post
Post #4





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


Cytat
A co w przypadku gdy będzie konieczność dołożenia 3-go poziomu zagłębień? Dodasz nową tabelę?


Masz racje tworzenie osobnych tabel moze faktycznie nie byc najlepszym rozwiazaniem, Zwlaszcza jesli struktura ma byc nieograniczona.

Cytat
Moim zdaniem rozwiązanie problem drzewiastego menu z jedną tabelą, w której klucz obcy wskazuje na nią samą, jest najlepszym pomysłem.[


To juz zalezy od priorytetów, ktore obrales. Od strony wydajnosci na pewno nie jest to najlepsza metoda z mozliwych.


--------------------
.:SMENTEK:.
Go to the top of the page
+Quote Post
voytasf
post
Post #5





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 9.11.2008

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


Dziękuję
Już myślałem że nikt nie odpowie.
Jednak bedę zawsze budował model struktur drzewiastych w jednej tabeli.
Zbieranie danych w tablicy jest rozwiązaniem tego problemu i zminiejsza ilość zapytań do bazy.
Pogrzebałem trochę i staram się użyć sfPropelActAsNestedSetBehaviorPlugin do listowania takich struktur.
Dzięki za pomoc

Pozdrawiam
Voytas
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 06:46