2010-10-24 5 views
1

Bonjour J'ai besoin d'aide pour afficher les données de 2 tables.Comment afficher les données de 2 tables connexes dans Zend Framework

j'ai donc 2 modèles:

//Klasy.php 

class Model_Klasy extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'klasy'; 
    protected $_primary = 'id'; 
    protected $_referenceMap = array(
    'Nauczyciele' => array(
     'columns'  => array('Wychowawca'), 
     'refTableClass' => 'Model_Nauczyciele', 
     'refColumns' => array('id') 
    ) 
    ); 

    public function listaKlas() 
    { 
    $dane = $this->select(); 
    return $this->fetchAll(); 
    } 
} 

et

//Nauczyciele.php 
    class Model_Nauczyciele extends Zend_Db_Table_Abstract 
    { 
     protected $_name = 'nauczyciele'; 
     protected $_dependentTables = 'Model_Klasy'; 
    } 

Dans Controller ont ce code:

public function listaAction() 
    { 
     $modelLista = new Model_Klasy(); 
    $this->view->listaKlas = $modelLista->listaKlas(); 
    } 

et Voir ceci:

<b>Lista Klas:</b> 
<table> 
    <tr> 
    <th>Klasa</th> 
    <th>Rok rozpoczęcia nauki</th> 
    <th>Wychowawca</th> 
    </tr> 
    <tr><?php echo $this->partialLoop('partials/ListaKlas.phtml', $this->listaKlas); ?></tr> 
</table> 

et ListaKlas.phtml de fichiers partiels:

<tr> 
    <td><?php echo $this->nazwa; ?></td> 
    <td><?php echo $this->rok_rozpoczecia; ?></td> 
    <td> 
    <?php 
    echo $this->Wychowawca; 
    ?> 
    </td> 
    <td style="width: 5%"> 
    <a href="<?php echo $this->baseUrl() . '/klasy/edytuj/id/'; 
      echo $this->id ;?>">Edytuj 
    </a> 
    </td> 
    <td style="width: 5%"> 
    <a href="<?php echo $this->baseUrl() . '/klasy/usun/id/'; 
      echo $this->id ;?>">Usuń 
    </a> 
    </td> 
</tr> 

du tableau Nauczyciele je veux afficher 2 colonnes, mais ne savent pas comment. Je connais la méthode findParentRow mais ne sais pas où l'utiliser et comment rendre les données de la deuxième table. Dans mon cas, je ne vois que l'ID de la table Klasy.

Répondre

1

Vous devriez avoir un aperçu détaillé de la manière dont les objets de domaine et les tables de base de données sont mappés dans Zend Framework. Par exemple, regardez le QuickStart: http://framework.zend.com/manual/en/learning.quickstart.create-model.html

Il est un modèle (Model_Klasy dans votre cas), un modèle mappeur connexion à DBTables (Model_KlasyMapper) et une classe représentant votre table Db (Model_Klasy_DbTable_Klasy).

Dans la couche de domaine, le modèle est juste la représentation de votre modèle sans connaissance de la couche de base de données. La classe dbTable sait comment se connecter à la base de données et le mappeur connecte les deux classes les unes aux autres. La méthode FetchAll() doit être à l'intérieur du mappeur, pas le Model_Klasy lui-même.

Dans le mappeur, la fonction fetchAll pourrait ressembler à ceci:

Dans cette fonction
public function fetchAll() 
{ 
    $resultSet = $this->getDbTable()->fetchAll(); 
    $entries = array(); 
    foreach ($resultSet as $row) { 
     $entry = new Application_Model_Klasy(); 
     $entry->setId($row->id) 
       ->setName($row->name); 
     $entries[] = $entry; 
    } 
    return $entries; 
} 

vous pouvez utiliser la resultSet $ ​​et $ row pour aller chercher des informations supplémentaires à partir de tables connexes. La page de manuel Zend_Db_Table Relationships en dit plus à ce sujet:

La variable $ row dans la boucle foreach de $ resultSet est un Zend_Db_Table_Row et peut trouver des informations connexes. Appeler $ row-> findParentRow ('Model_DbTable_Nauczyciele') va chercher la relation.

+0

Merci pour votre information. Je dois maintenant en lire plus à ce sujet. Dans un livre à partir de laquelle j'ai appris ZF thet écrire cela comme dans mon cas. Je dois le changer. – WooCaSh

+0

Je change de modèle pour cette méthode que tu me montres. Merci pour l'aide – WooCaSh

Questions connexes