Fetch rows

Salve ragazzi…ho una domanda veloce e anche abbastanza banale. Tempo fa ero riuscito a farlo, ora non trovo più il file e ho troppo mal di testa per mettermi a pensare… Praticamente io devo fare in modo di visualizzare in una vista il menù di un ristorante. E quindi per un menù, visualizzare le categorie di questo menù e per ogni cateogoria i vari "items" ad essa associata.

Praticamente avrei bisogno di due cicli foreach uno dentro l’altro. Come faccio a farlo? Se avete bisogno di altre info chiedete pure…

Ti sei risposto da solo: due foreach uno dentro l’altro.

Se non ricordo male la corretta sintassi potrebbe essere foreach (Categoria::model->find(array(‘chiave’=>'valore))) as $item) foreach (SottoCat::model->find … )

I risultati delle query sono array quindi puoi iterare in quel modo. Ecco un esempio:




$select = array();

foreach (AuthAssignment::model()->findAll('userid=' . ($model->id)) as $item)

foreach (AuthItem::model()->findAll("name='{$item->itemname}'") as $item)

$select[] = $item->id;



In questo caso ho usato un foreach di foreach per raccogliere tutti i permessi di un utente utilizzando RBAC (se lo hai mai usato riconoscerai il nome delle tabelle).

Ah! Fai attenzione: io ho usato sempre $item ma solo perchè ho una sola istruzione da eseguire quindi dell’$item generato da AuthAssignment non mi interesso. Se mi servisse, il secondo foreach lo sovrascriverebbe. Bisognerebbe, più correttamente, chiamarli $itemAuthAssignment ed $itemAuthItem. Ho sbagliato a non dare un significato semantico al nome delle variabili. Spero non crei confusione.

infatti…grazie. Il dubbio era proprio sulla sintassi…Nell’esempio che mi hai dato nell’array select si salvano gli id dei vari item giusto? ecco…se io volessi stamparli direttamente senza salvarli in nessuna variabile mi basterebbe semplicemente fare un echo?

si si


echo $item->id;

o qualsiasi altra proprietà di $item

Puoi anche usare le relations per caricare i sottomenu, se per esempio in categorie hai una proprieta’ sottocategoria




<?php foreach (Categorie::model()->findAll(array('with'=>array('sottoCategorie'))) as $i=>$categoria):?>

   <?php foreach ($categoria->sottoCategorie as $j=>$sottocategoria):?>

       <?php echo $sottocategoria->nome?>

   <?php endforeach;?>


<?php endforeach;?>

In questa maniera ti ritrovi a fare esattamente 1 query.