Как отобразить данные из 2 связанных таблиц в Zend Framework - PullRequest
1 голос
/ 24 октября 2010

Здравствуйте, мне нужна помощь с отображением данных из 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();
    }

и в View this:

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

1 Ответ

1 голос
/ 24 октября 2010

Вы должны подробно рассмотреть, как объекты домена и таблицы базы данных отображаются в Zend Framework.Например, посмотрите на быстрый старт: 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 Relationships рассказывает об этом подробнее: http://framework.zend.com/manual/en/zend.db.table.relationships.html

Переменная $ row в цикле foreach в $ resultSet является Zend_Db_Table_Row и может найти связанную информацию.Вызов $ row-> findParentRow ('Model_DbTable_Nauczyciele') извлечет отношение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...