Обработка отношений "один ко многим" с помощью ZF части
Допустим, я перечисляю музыкальных исполнителей, каждый художник имеет базовую информацию, такую как имя, возраст и т. Д., Хранящиеся в таблице артиста. У них также есть записи в таблице альбомов (название альбома / обложка альбома и т. Д.), Ссылающиеся на таблицу исполнителя с использованием идентификатора исполнителя в качестве внешнего ключа.
У меня есть файл 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() для необъекта
var_dump
из $this->artist
знак равно NULL
,
1 ответ
В твоем звонке вид:
<?php $this->partialLoop()->setObjectKey('artist'); ?>
<?php echo $this->partialLoop('yourpartial.phtml', $artists); ?>
Примечание. Я полагаю, что это глобально изменяет ключ объекта для экземпляра помощника partLoop, поэтому вы можете выбрать что-то более общее, чем artist
или не забудьте сбросить его, если вы будете использовать partLoop для чего-то другого позже в том же виде.
и в вашем частичном:
<?php foreach($this->artist->findDependentRowSet('Albums') as $album): ?>
<!-- looping stuff here -->
<?php endforeach; ?>
Проверьте docs/api для Zend_Db_Table_Row для того, что фактический аргумент (ы), чтобы findDependentRowset
должно быть в соответствии с вашими моделями соглашений об именах. Вам также может понадобиться настроить некоторые вещи в классе таблицы, если вы еще не определили _referenceMap
,