2010-10-24 35 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

相关问题