Passaggio campi da Model a Model

Ciao,

sto provando a strutturare un catalogo prodotti con

 - categoria

   - sottocategoria

     - prodotto

Ho Creato il model categoria:

    
function getAllCategories($db)
    {
      $result = $db->query('SELECT * FROM _category WHERE category_publish = "Y" ORDER BY list_order ASC');
      $rows = $result->fetchAll();
      return $rows;       
    }
    
    function getAllSubCategory($db)
    {
      $result = $db->query('SELECT cc.* '.
               ' FROM _category_child AS cc' .
                ' LEFT JOIN _category_xref AS cx ON cc.category_id = cx.category_child_id' .
               ' LEFT JOIN _category AS cp ON cx.category_parent_id = cp.category_id' .
               ' WHERE cp.category_id  = 1');                           
      $row = $result->fetchAll();
      return $row; 
    }

La prima funzione, visualizza le categorie.

La seconda funzione visualizza le sottocategorie assocciate a quella categoria.

La query funziona correttamente, ma come vedete, solo sè indico la chiveprimaria della categoria WHERE cp.category_id  = 1, ma non va bene, perchè dovrei utilizzare la chiave estrapolata con la function getAllCategories e passarla alla function getAllSubCategory(catid) IN TEORIA :)

i dati vengono recuperati da un ciclo for nella view:

               <?php 
                  $i=0;
                     foreach($this->categorie as $categoria) : ?>               
                  <li><span class="nav<?php echo $this->escape($categoria['category_id']);?>"><?php echo $this->escape($categoria['category_name']);?></span>
                     <ul class="sub">
                        <?php 
                           $i=0;
                              foreach($this->subcategorie as $subcategoria) : ?>   
                           <li><a href="javascript:viewProducts(<?php echo $this->escape($categoria['category_id']);?>,<?php echo $this->escape($subcategoria['category_id']);?>);" title="Sharm El Sheikh Diving"><?php echo $this->escape($subcategoria['category_name']);?></a></li>
                        <?php $i++; endforeach; ?>
                     </ul>                  
                  </li>
               <?php $i++; endforeach; ?>

Con php senza zend,

avrei  fatto questo:

 1. Una query per selezionare tutte le categorie  CICLO FOR

 2. Salvataggio del valore Categoria_ID memorizzato dentro una variabile "ID"

 3. Una query per selezionare tutte le sottocategorie dove la condizione category_id = "ID"  CICLO FOR

Sono stato abbastanza chiaro ??

Spero di si.

Grazie

inviato 6 anni fa
C4rLoS
X 0 X

Perchè non usi zend_db_select per la query? A me piace di più.

Comunque, con il framework puoi usare la stessa struttura logica. Non vedo il problema.

Per fare quello che chiedi (con la logica che utilizzi) mi sembra ovvio che va a finire che fai tante query quante sono le tue categorie. Non è forse la miglior scelta da fare...

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Buono a sapersi.

Come dovrei procedere ??

Per realizzare la query, come dovrei scriverla ??

Intanto mi leggo la documentazione

Grazie

risposto 6 anni fa
C4rLoS
X 0 X
Perchè non usi zend_db_select per la query? A me piace di più.

Ho modificato le query utilizzando $select = $this->select(), ma rimane il problema di prima.

Non capisco come debbo procedere  :(

Ciao

risposto 6 anni fa
C4rLoS
X 0 X

La documentazione su zend_db_select è esauriente mi pare.

Ora il problema non è la query in se ma l'algoritmo che vuoi utilizzare per estrarre i dati dal database ed stamparli a video.

Fare una query per ogni categoria mi sembra stupido.

Piuttosto farei un'unica query iniziale (ovviamente il tutto in dipendenza della struttura del tuo database) in cui estraggo i vari dati e li spalmo in un array multidimensionale. Da qui farei un ciclo per stampare a video le categorie e sottocategorie, il ciclo potrebbe essere un ciclo for il quale permette di cambiare l'indice dell'array per cui ad ogni indice della categoria stampo, con un ciclo annidato, le sottocategorie, finite queste continuo con il ciclo padre.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

La documentazione è perfetta.

ma preferire utilizzare per il momento lo schema impiegato.

Vorrei più che altro, capire come passare al secondo model un dato prelevato dal primo Model ?? questo dal controller. Credo si debba fare da qui. o no ??

Grazie :)

risposto 6 anni fa
C4rLoS
X 0 X

Non vedo dove sia il problema di passaggio di parametro. Sono normali passaggi di parametri e variabili tra funzioni php.

Piuttosto rivedrei la logica dell'algoritmo, se hai 100 categorie con il tuo sistema faresti 100 query per estrarre le sottocategorie, non mi sembra una buona scelta.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

io farei così:

un solo metodo pubblico nel model  getCategories() il quale restituisce un array :

categorie
          idcategoria
          nomecategoria
          ....
          ....
          sottocategorie
                              idsottocat
                              nomesottocat
                               ........
                               -----

sarebbe auspicabile scrivere una stringa sql adeguata per estrarre tutto con una sola query tenendo conto degli indici definiti sul db in questo modo sfruttiamo la potenza del motore del database e riduciamo la necessità di gestire complesse eccezioni..

tuttavia nel caso di molte categorie e molte sottocategorie è meglio ripensare la logica estraendo le categorie per gruppi oppure requperare le sottocategorie di una sola categoria per volta.

risposto 6 anni fa
fabio.pellati
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda