errori con le JOIN

ciao a tutti, e' da un po' che sto cercando di risolvere un problema: non riesco con Zend a far visualizzare una tabella coi risultati di un JOIN tra due tabelle.

dunque le tabelle sono:

tag(nome, idgioco)

gioco(idgioco, nome, ecc..)

vorrei semplicemente (per iniziare) creare una tabella che indica nome del tag e nome del gioco (il join e' fatto su idgioco). Ho provato in svariati modi (iniziando con un model-controller-view) ma ora sono arrivato a una soluzione semplice che dovrebbe funzionare:

//nel controller

public function taggaAction()

{

      $localhost='localhost';

      $username='postgres';

      $pass='xxxxxx';

      $dbname='gamebook';

      $port='5432';

      $params = array('port'=>$port, 'host'=>$localhost, 'username'=>$username,  'password'=>$pass, 'dbname'=>$dbname);           

      $db = Zend_Db::factory('pdo_pgsql', $params);

      $select = $db->select()

                   ->from(array( 't' => 'tag'), array('nometag' => 't.nome'))

                   ->join(array('g' => 'gioco'),'t.idgioco = g.idgioco',array('nomegioco' => 'g.nome') );

                 $this->view->tags = $db->fetchAll($select);

}

   

mentre la view tagga.phtml e' cosi'

<table>

<tr>

    <th>Tag</th>

    <th>Gioco</th>

    <th>&nbsp;</th>

</tr>

<?php foreach($this->tags as $tag) : ?>

<tr>

    <td><?php echo $this->escape($tag->nometag);?></td> //riga 13

    <td><?php echo $this->escape($tag->nomegioco);?></td> //riga14

    

</tr>

<?php endforeach; ?>

</table>

tutto cio' mi visualizza una tabella di errori :) Notice: Trying to get property of non-object in ..tagga.phtml

on line 13 (e 14).

Sicuramente ho capito male l'utilizzo di Zend (forse in tante parti), qualcuno riesce a capire dove sbaglio?

grazie a tutti, scusate per il lungo post

inviato 5 anni fa
kermit136
X 0 X

risolto, grazie lo stesso

<td><?php echo $this->escape($tag['nometag']);?></td> //riga 13

    <td><?php echo $this->escape($tag->['nomegioco']);?></td> //riga14

banalmente sbagliavo l'accesso all'array

risposto 5 anni fa
kermit136
X 0 X

Benissimo, ti propongo comunque l'approccio descritto nella documentazione ufficiale circa l'esecuzione di una query con l'oggetto Zend_Db_Select.

Una volta creato l'oggetto Zend_Db_Select dallo Zend_Db_Adapter:

$select = $db->select()-> ...

per esequire la query devi prima ricavare l'oggetto Zend_Db_Statement e poi effettuare la fetch. Le strade per ottenere l'oggetto Zend_Db_Statement sono 2:

$stmt = $db->query($select);

oppure

$stmt = $select->query();

Fatto ciò non ti resta che fare la fetch:

$result = $stmt->fetchAll();

dove $result sarà un oggetto di tipo Zend_Db_Table_Rowset

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda