还有另一种可能将 FeatureSet 添加到 TableGateway。
在 Module.php 中,您可以定义(例如表用户)
'UserTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new UserEntity());
return new TableGateway('user', $dbAdapter, new Feature\SequenceFeature('user','user_id_seq'), $resultSetPrototype);
但是SequenceFeature 中有一个错误。当您使用公共架构时,一切都很好。当您必须使用其他模式时,您应该使用 Zend\Db\Sql\TableIdentifier;
在这种情况下 Module.php 应该是:
'UserTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new UserEntity());
return new TableGateway(new TableIdentifier('user','someSchema'), $dbAdapter, new Feature\SequenceFeature(new TableIdentifier('user','someSchema'),'user_id_seq'), $resultSetPrototype);
在这种情况下,Postgresql 查询 SELECT NEXTVAL 会出错,因为 Feature\SequenceFeature 将使用公共模式而不是在第一个参数中定义来准备查询
选择 NEXTVAL('user_id_seq')
在这种情况下,sql查询应该是
SELECT NEXTVAL('someSchema'.'user_id_seq')