Sql zend 2:将Paginator与TableGateway一起使用
我在Module.php中配置了如下模型:Sql zend 2:将Paginator与TableGateway一起使用,sql,design-patterns,dependency-injection,zend-framework2,Sql,Design Patterns,Dependency Injection,Zend Framework2,我在Module.php中配置了如下模型: 'MyModule\Model\MyTable' => function($sm) { $tableGateway = $sm->get('MyTableGateway'); $table = new MyTable($tableGateway); return $table; }, 'MyTableGateway' => function($sm) { $dbAdapter = $sm->get
'MyModule\Model\MyTable' => function($sm) {
$tableGateway = $sm->get('MyTableGateway');
$table = new MyTable($tableGateway);
return $table;
},
'MyTableGateway' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(
new Ticket());
return new TableGateway('someTable', $dbAdapter, null,
$resultSetPrototype);
},
现在我在MyTable.php中执行此操作:
$resultSet = $this->tableGateway->select(
function(Select $select) {
$select
->order('id ASC')
->where->equalTo('aaaa', 2343)
->and
->where->notEqualTo('bbbb', 'sdfsdf')
;
});
现在,我想使用分页,但看看他们提供的,您可以这样做:
// create a new Select object for the table album
$select = new Select('someTable');
// create a new result set based on the Album entity
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Album());
// create a new pagination adapter object
$paginatorAdapter = new DbSelect(
// our configured select object
$select,
// the adapter to run it against
$this->tableGateway->getAdapter(),
// the result set to hydrate
$resultSetPrototype
);
$paginator = new Paginator($paginatorAdapter);
return $paginator;
为什么我必须做
$select=newselect('someTable')代码>这是否违反了DI原则,因为我正在静态输入表的名称?在Module.php中配置表名似乎是正确的,但仍然需要在实际模型中对其进行硬编码。我可以从服务管理器中检索表名吗 根据Crisp的评论,下面是我的代码现在的样子
$select = new Select($this->tableGateway->getTable());
$paginatorAdapter = new DbSelect(
$select,
$this->tableGateway->getAdapter(),
$this->tableGateway->getResultSetPrototype()
);
$paginator = new Paginator($paginatorAdapter);
return $paginator;
奇怪的是,他们在教程中没有这样做。$select=newselect($this->tableGateway->getTable())代码>?太好了,很简单。我还在模型中设置resultSetPrototype,是否也有从Module.php中获取它的原因?别介意,我认为getResultSetPrototype()是我想要的。看看表网关的可用方法,getResultSetPrototype()
看起来像您需要的->(编辑:我看到您已经找到了:o))