2010-10-24 3 views
1

Здравствуйте, мне нужна помощь в отображении данных из 2-х таблиц.Как отображать данные из 2 связанных таблиц в Zend Framework

Так у меня есть 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, но не знаю, где его использовать и как отображать данные со второй таблицы. В моем случае я вижу только ID из таблицы Klasy.

ответ

1

Вы должны подробно изучить способ отображения объектов домена и таблиц базы данных в Zend Framework. Например, посмотрите на QuickStart: http://framework.zend.com/manual/en/learning.quickstart.create-model.html

Существует модель (Model_Klasy в вашем случае), картостроитель подключения моделей DbTables (Model_KlasyMapper) и класс, представляющий вашу Db таблицу (Model_Klasy_DbTable_Klasy).

В доменном слое модель представляет собой просто представление вашей модели без знания уровня базы данных. Класс dbTable знает, как подключиться к базе данных, а mapper соединяет оба класса друг с другом. Метод 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

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

+0

Спасибо за информацию. Теперь я должен больше узнать об этом. В книге, из которой я узнал ZF, напишите, как в моем случае. Я должен изменить его. – WooCaSh

+0

Я меняю свою модель на этот метод, что вы показываете мне. Спасибо за помощь – WooCaSh

Смежные вопросы