Я успешно завершил учебник таблицы альбомов в руководстве Zend Framework 2. Я реализовал использование tablegateway. Я вижу, что он использовал только одну таблицу под названием «альбом», и поэтому он реализовал ее в соответствии с одной таблицей.Доступ к 2 различным таблицам из того же файла контроллера
Допустим, у меня есть другая таблица под названием «художник», которая содержит информацию каждого исполнителя из этой таблицы «альбом».
Сейчас в руководстве, он просто использует:
$this->getAlbumTable()->fetchAll();
Теперь я хочу сделать нечто подобное со столом «художники», так что мой запрос может быть как:
$this->getArtistsTable()->fetchAll();
Так что я должен изменить или добавить? Я уже создал таблицу artist в mySql со столбцами: Name, DOB, Country.
P.S: Я не собираюсь использовать объединения или что-либо атм. Просто хочу получить доступ ко второй таблице в том же контроллере (тот же модуль).
РЕШЕНИЕ: С помощью 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);
},
),
);
}
Теперь вы можете получить доступ к обеим таблицам с вашего контроллера. Задача решена. День хорошо провел.
Можете ли вы помочь мне на 3-й стадии. У меня уже есть завод в module.php, как это сделано в руководстве. Теперь, когда я хочу включить в него другую таблицу, следует ли добавлять новые настройки на новые фабрики? или добавить их в существующую. –
Если у вас действительно есть две минуты, вы можете сделать следующее: отредактировать функцию getServiceConfig() для 2 таблиц. Один из них уже приведен в руководстве, вы знаете для таблицы альбомов, все, что я вам требую, это добавить в той же функции строки для таблицы с именем artist. Я просто смущен, потому что имя модуля и имя таблицы одинаковы. Настолько трудно понять, что делает эта функция. –
Именно здесь http://framework.zend.com/manual/current/en/user-guide/database-and-models.html#using-servicemanager-to-configure-the-table-gateway-and-inject- in-the albumtable – venca