Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql zend 2:将Paginator与TableGateway一起使用_Sql_Design Patterns_Dependency Injection_Zend Framework2 - Fatal编程技术网

Sql zend 2:将Paginator与TableGateway一起使用

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

我在Module.php中配置了如下模型:

'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))