2010-10-24 33 views
1

您好,我需要幫助顯示來自2個表的數據。如何在Zend Framework中顯示來自2個相關表的數據

,所以我有2種型號:

//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(); 
    } 
} 

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

在控制器具有代碼:

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

,並查看此:

<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> 

和部分文件ListaKlas.phtml:

<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> 

從表Nauczyciele我想顯示2列,但不知道怎麼辦。我知道方法findParentRow但不知道在哪裏使用它,以及如何渲染來自第二個表的數據。在我的情況下,我只看到Klasy表中的ID。

回答

1

您應該詳細瞭解域對象和數據庫表在Zend Framework中的映射方式。例如,看一下快速入門:http://framework.zend.com/manual/en/learning.quickstart.create-model.html

有一個模型(Model_Klasy你的情況),連接模型DbTables(Model_KlasyMapper),代表你的數據庫表(Model_Klasy_DbTable_Klasy)的類的映射。

在域圖層中,模型只是模型的表示,沒有數據庫層的知識。 dbTable類知道如何連接到數據庫,並且映射器將兩個類連接到彼此。 FetchAll()方法應該位於映射器內部,而不是Model_Klasy本身。

在映射器中,使用fetchall功能可能是這樣的:

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; 
} 

在此功能,您可以使用$ ResultSet和$行來從相關表的其他信息。 Zend_Db_Table Relationships手冊頁告訴我們更多關於這個的信息:http://framework.zend.com/manual/en/zend.db.table.relationships.html

$ resultSet的foreach循環中的$ row變量是一個Zend_Db_Table_Row,它可以找到相關信息。調用$ row-> findParentRow('Model_DbTable_Nauczyciele')將獲取關係。

+0

感謝您的信息。我現在必須讀更多關於這個。在我學習ZF的書中,我寫的就像在我的例子中。我必須改變它。 – WooCaSh 2010-10-24 14:03:05

+0

我把我的模型改成這個方法,告訴我什麼。感謝幫助 – WooCaSh 2010-10-26 14:27:13

相關問題