3

在 Zend Framework 应用程序中,它与ZF2 入门教程中的专辑应用程序非常相似,我使用 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; ?>
4

1 回答 1

0

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

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

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

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

斯托扬。

于 2013-04-01T18:38:55.900 回答