Доступ к 2 различным таблицам из одного и того же файла контроллера
Я успешно завершил урок по таблице альбомов в руководстве по Zend Framework 2. Я реализовал с помощью tablegateway. Я вижу, что он использовал только одну таблицу с именем "альбом" и, следовательно, он реализовал в соответствии с этой одной таблицей.
Допустим, у меня есть еще одна таблица под названием "Artist", которая содержит информацию о каждом исполнителе из этой таблицы "album".
Теперь в руководстве он просто использует:
$this->getAlbumTable()->fetchAll();
Теперь я хочу сделать то же самое с таблицей "художников", чтобы мой запрос мог выглядеть так:
$this->getArtistsTable()->fetchAll();
Так что я должен изменить или добавить?? Я уже создал таблицу исполнителей в mySql со столбцами: Name, DOB, Country.
PS: я не собираюсь использовать соединения или что-нибудь еще. Просто хочу получить доступ ко второй таблице в том же контроллере (тот же модуль).
РЕШЕНИЕ: С помощью Venca я смог решить эту проблему: вот как вы должны отредактировать заводские настройки для 2 таблиц и более.
public function getServiceConfig()
{
// Given in Manual
return array(
'factories' => array(
'Album\Model\AlbumTable' => function($sm) {
$tableGateway = $sm->get('AlbumTableGateway');
$table = new AlbumTable($tableGateway);
return $table;
},
'AlbumTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Album());
return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);
},
// Added another table named Artist
'Album\Model\ArtistTable' => function($sm) {
$tableGateway = $sm->get('ArtistTableGateway');
$table = new AlbumTable($tableGateway);
return $table;
},
'ArtistTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Artist());
return new TableGateway('artist', $dbAdapter, null, $resultSetPrototype);
},
),
);
}
Теперь вы можете получить доступ к обеим таблицам с вашего контроллера. Задача решена. День хорошо проведен.
1 ответ
В соответствии с руководством
- Создать модель
- Создать таблицу моделей
Добавьте фабрику к вашему модулю
return array( 'factories' => array( 'Album\Model\ArtistTable' => function($sm) { $tableGateway = $sm->get('ArtistTableGateway'); $table = new ArtistTable($tableGateway); return $table; }, 'ArtistTableGateway' => function ($sm) { $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new Artist()); return new TableGateway('artist', $dbAdapter, null, $resultSetPrototype); }, ), );