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

时间:2013-04-01 15:06:20

标签: php zend-framework2 resultset zend-db tablegateway

在Zend Framework应用程序中,它与ZF2 Getting Started tutorial的相册应用程序非常相似,我使用ResultSet对象将模型中的数据通过控制器传输到视图(有关详细信息,请参阅代码下文)。

这样可以正常工作,但我不知道,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;
        ...
    }
    ...
}

控制器:

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; ?>

1 个答案:

答案 0 :(得分:0)

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

结果的悖论是迭代并加载了foreachvar_dump()没有看到,这可以解释为返回的结果实际上是缓冲的。

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

希望这会有所帮助,反馈将不胜感激:),

斯托。