php - Zend\Db\ResultSet\ResultSet 对象在哪里存储检索到的数据?

标签 php zend-framework2 resultset zend-db tablegateway

在 Zend Framework 应用程序中,它的构建与 ZF2 Getting Started tutorial 中的相册应用程序非常相似,我使用 ResultSet 对象将数据从模型通过 Controller 传输到 View (有关详细信息,请参见下面的代码)。

这工作正常,但我不明白 ResultSet 对象保存数据的位置。我可以循环它,例如使用 foreach 并逐行获取数据(或更好的逐个模型对象)。但是当我在我的 IDE 中或简单地使用 var_dump(...) 调试它时,它似乎是空的。

Zend\Db\ResultSet\ResultSet 对象如何/在哪里保存从数据库检索的数据?

代码的相关部分:

模块设置:

class Module implements ConfigProviderInterface, ServiceProviderInterface, AutoloaderProviderInterface {
...
    public function getServiceConfig() {
        try {
            return array (
                'factories' =>array(
                    ...
                    'SportTable' => function ($serviceManager) {
                        $tableGateway = $serviceManager->get('SportTableGateway');
                        $table = new SportTable($tableGateway);
                        return $table;
                    },
                    'SportTableGateway' => function ($serviceManager) {
                        $dbAdapter = $serviceManager->get('Zend\Db\Adapter\Adapter');
                        $resultSetPrototype = new ResultSet();
                        $resultSetPrototype->setArrayObjectPrototype(new Sport());
                        return new TableGateway('sports', $dbAdapter, null, $resultSetPrototype);
                    },
                    ...
                )
            );
        }
        ...
}

模型(表):

class CourseTable {
        ...
    public function findAllByCityNameAndSportTitle($cityName, $sportTitle) {
        $select = new Select();
        $where = new Where();
        ...
        $resultSet = $this->tableGateway->selectWith($select);
        return $resultSet;
    }
    ...
}

模型(映射器):

class Course implements ArraySerializableInterface {

    public $id;
    ...

    public function exchangeArray(array $data) {
        $this->id               = (isset($data['id'])) ? $data['id'] : null;
        ...
    }
    ...
}

Controller :

class CatalogController extends AbstractActionController {
    ...
    public function listCoursesAction() {
        $cityName = $this->params()->fromRoute('city', null);
        $sportTitle = $this->params()->fromRoute('sport', null);
        return new ViewModel(array(
            'city' => $cityName,
            'sport' => $sportTitle,
            'courses' => $this->getCourseTable()->findAllByCityNameAndSportTitle($cityName, $sportTitle)
        ));
    }
    ...
}

查看:

<?php foreach ($courses as $course) : ?>
<div>
    <div>id: <?php echo $this->escapeHtml($course->id); ?></div>
    ...
</div>
<?php endforeach; ?>

最佳答案

Zend\Db\ResultSet\ResultSet 或者更确切地说 Zend\Db\ResultSet\AbstractResultSet 是你问题的答案。这个对象有 10-12 个方法,其中大部分提供迭代功能。要回答您的问题,Zend\Db\ResultSet\ResultSet 会在其 dataSource 参数 (Zend\Db\ResultSet\ResultSet::$dataSource) 中保存从 Db 检索到的信息.

结果被 foreach 迭代和加载但 var_dump() 看不到的悖论可以解释为返回的结果实际上保存在缓冲中。

如果你想访问结果集,我建议你使用 Zend\Db\ResultSet\ResultSet::toArray() ($resultSet->toArray() ).这将返回一个数组数组,其中每个数组都是数据库表中的一行。

希望这对您有所帮助,我们将不胜感激 :),

斯托扬。

关于php - Zend\Db\ResultSet\ResultSet 对象在哪里存储检索到的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15745929/

相关文章:

php - 保存更改按钮不起作用

dependency-injection - 如何正确地将 ObjectManager 注入(inject)到 Fieldsets 中?

jquery - jQuery如何判断选择的结果是否为空?

php - 可以将 Zend Form 2 与 Zend Framework 1 一起使用吗?

javascript - Zf2 布局 css 和 javascript 路径在子路由上不解析

java - 用于存储数据库数据的 ResultSet 替代方案

java - JDBC 未执行 SHOW DATABASES 命令

PHP 通知 : undefined offset 381 and 382 with in while loop

javascript - 如何让这个JS倒计时时钟依赖DB值来倒计时?

php - 如何过滤特定日期的过去一周数据