Доступ к 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 ответ

Решение

В соответствии с руководством

  1. Создать модель
  2. Создать таблицу моделей
  3. Добавьте фабрику к вашему модулю

     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);
             },
         ),
     );
    
Другие вопросы по тегам