Обработка отношений «один ко многим» с помощью ZFpartloop - PullRequest
1 голос
/ 20 января 2010

Допустим, я перечисляю музыкальных исполнителей, каждый художник имеет базовую информацию, такую ​​как имя, возраст и т. Д., Хранящиеся в таблице артиста. У них также есть записи в таблице альбомов (название альбома / обложка альбома и т. Д.), Ссылающиеся на таблицу исполнителя с использованием идентификатора исполнителя в качестве внешнего ключа.

У меня есть файл Model_Artist (Artist.php):

class Model_Artist extends Zend_Db_Table_Abstract
{
    protected $_name = 'artist';
    protected $_dependentTables = array('Model_ArtistAlbums');
    public function fetchArtistss()
    {
        $select = $this->select();
        return $this->fetchAll($select);
    }
}

и в файл Model_ArtistAlbums (ArtistAlbums.php)

class Model_ArtistAlbums extends Zend_Db_Table_Abstract
{
    protected $_name = 'albums';

    protected $_referenceMap = array(
        'Artists' => array(
            'columns'       => 'alb_art_id',
            'refTableClass' => 'Model_Artist',
            'refColumns'    => 'art_id'
        )
    );
    // etc
}

в моем контроллере:

public function indexAction()
{
    /* THIS WORKS
    $art = new Model_Artist();
    $artRowset = $art->find(1);
    $art1 = $artRowset->current();
    $artalbums = $art1->findDependentRowset('Model_ArtistAlbums');
    foreach($artalbums as $album){
        echo $album->alb_title."<br>";
    }
    */
    $arts = new Model_Artist();
    $this->view->artists = $arts->fetchArtists();
}

в файле просмотра:

$this->partial()->setObjectKey('artist');
echo $this->partialLoop('admin/list-artists.phtml', $this->artists);

но с этим кодом в Artist / List-Artist.phtml:

foreach($this->artist->findDependentRowset('albums') as $album):
// other stuff
endforeach;

я получаю эту ошибку:

Неустранимая ошибка: вызов функции-члена findDependentRowset () для необъекта

A var_dump из $this->artist = NULL.

1 Ответ

4 голосов
/ 20 января 2010

в вашем звонящем представлении:

<?php $this->partialLoop()->setObjectKey('artist'); ?>
<?php echo $this->partialLoop('yourpartial.phtml', $artists); ?>

Примечание - я полагаю, что это глобально изменяет ключ объекта для экземпляра помощникаpartLoop, так что вы можете выбрать что-то более общее, чем artist, или не забудьте сбросить его, если вы позже используете в этом же режиме PartalLoop для другого объекта .

и в вашей части:

<?php foreach($this->artist->findDependentRowSet('Albums') as $album): ?>
 <!-- looping stuff here -->
<?php endforeach; ?>

Проверьте docs / api для Zend_Db_Table_Row, чтобы узнать, какими должны быть фактические аргументы для findDependentRowset с точки зрения соглашений о присвоении имен для ваших проектов. Вам также может понадобиться настроить некоторые вещи в классе таблицы, если вы еще не определили _referenceMap.

...