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);
},
),
);
}
これで、コントローラーから両方のテーブルにアクセスできます。問題が解決しました。よく過ごした日。