我已成功完成Zend Framework 2手册中的专辑表教程。我已经使用tablegateway实现了。我可以看到他只使用了一个名为“album”的表,因此他根据那个表实现了。
假设我有另一张名为“艺术家”的表格,其中包含每张艺术家的信息。
现在在手册中,他只是使用:
$this->getAlbumTable()->fetchAll();
现在我想对“艺术家”表做类似的事情,以便我的查询可以像:
$this->getArtistsTable()->fetchAll();
那么我应该改变或添加什么?我已经在mySql中创建了带有列的艺术家表:Name,DOB,Country。
P.S:我不打算使用连接或任何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);
},
),
);
}
现在您可以从控制器访问这两个表。问题解决了。很好的一天。
答案 0 :(得分:0)
根据manual
将工厂添加到您的模块
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);
},
),
);