【问题标题】:How to display data from 2 related tables in Zend Framework如何在 Zend Framework 中显示来自 2 个相关表的数据
【发布时间】:2010-10-24 06:23:31
【问题描述】:

您好,我需要帮助来显示 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。

【问题讨论】:

    标签: mysql model-view-controller zend-framework


    【解决方案1】:

    您应该详细了解域对象和数据库表在 Zend 框架中的映射方式。例如,查看快速入门:http://framework.zend.com/manual/en/learning.quickstart.create-model.html

    有一个模型(在你的例子中是 Model_Klasy),一个将模型连接到 DbTables 的映射器(Model_KlasyMapper)和一个代表你的 Db 表的类(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 和 $row 从相关表中获取附加信息。 Zend_Db_Table 关系手册页详细说明了这一点:http://framework.zend.com/manual/en/zend.db.table.relationships.html

    $resultSet 的foreach 循环中的$row 变量是一个Zend_Db_Table_Row,可以找到相关信息。调用 $row->findParentRow('Model_DbTable_Nauczyciele') 将获取关系。

    【讨论】:

    • 感谢您的信息。我现在必须阅读更多关于此的内容。在我学习 ZF 的书中,他们写的就像我的情况一样。我必须改变它。
    • 我把我的模型改成你给我看的这个方法。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多