0

Zend Framework 2 マニュアルのアルバム テーブル チュートリアルを正常に完了しました。テーブルゲートウェイを使用して実装しました。彼が「album」という名前のテーブルを 1 つしか使用していないことがわかります。したがって、彼はその 1 つのテーブルに従って実装しました。

その「アルバム」テーブルからの各アーティストの情報を保持する「アーティスト」という別のテーブルがあるとしましょう。

今マニュアルでは、彼は単に使用します:

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

今、「アーティスト」テーブルで同様のことをしたいので、クエリは次のようになります。

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

では、何を変更または追加する必要がありますか?? 名前、生年月日、国などの列を含むアーティスト テーブルを mySql に既に作成しています。

PS: 結合などの atm を使用するつもりはありません。同じコントローラー(同じモジュール)の2番目のテーブルにアクセスしたいだけです。

解決策: 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. モジュールに factory を追加する

     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 に答える