0

我已成功完成 Zend Framework 2 手册中的专辑表教程。我已经使用 tablegateway 实现了。我可以看到他只使用了一张名为“album”的表,因此他根据那张表实施。

假设我有另一个名为“艺术家”的表,其中包含该“专辑”表中每个艺术家的信息。

现在在手册中,他只是使用:

$this->getAlbumTable()->fetchAll();

现在我想用“艺术家”表做类似的事情,这样我的查询就可以像:

$this->getArtistsTable()->fetchAll();

那么我应该更改或添加什么?我已经在 mySql 中创建了包含以下列的艺术家表:名称、出生日期、国家/地区。

PS:我不会使用连接或任何 atm。只想访问同一控制器(同一模块)中的第二个表。

解决方案: 在 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);
                },
             ),
         ); 
     }

现在您可以从控制器访问这两个表。问题解决了。一天过得很好。

4

1 回答 1

0

根据说明书

  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);
             },
         ),
     );
    
于 2015-06-10T08:32:04.403 回答