有没有办法在不循环结果集两次的情况下水合对象?

时间:2016-05-24 17:16:26

标签: php oop db2-400 hydration

如果我使用Hydrator将我的查询结果的值放入我的Model I的实例中,则必须循环两次结果(一次用于保湿每一行/对象,然后在实际上再次实现使用结果)。

我知道有各种PDO_FETCH_*模式,例如FETCH_INTOFETCH_CLASS,它们似乎可以实现相同的功能。我能看到的唯一区别是在水合过程中可能会操纵数据。

我只是试图找出使用水合器的原因,因为它们需要在结果集中进行额外的迭代。我觉得必须有一些理由或方法来使这个额外的迭代可以接受,我很好奇它是什么。我不确定为什么像水合物这样的编程模式如此普遍,因为从表面看它在大多数情况下似乎是浪费。在水化期间操纵数据是使用Hydrators的唯一原因吗?

"全部找到" mapper中的方法:

$this->hydratorZend\Stdlib\Hydrator\ArraySerializable的一个实例,但出于此问题的目的,可以替换为任何其他保湿器。)

/*
 * @return array|PagesInterface[]
 */
public function findAll(){
    //Perform select
    $sql = "SELECT * FROM CMSMAIN";
    $stmt = $this->dbal->prepare($sql);
    $result = $stmt->execute();

    if($result === true){
        //$stmt->setFetchMode(\PDO::FETCH_CLASS, $modelGoesHere); //Using FETCH_CLASS populates the model directly eliminating the need for the extra iteration.
        $records = $stmt->fetchAll();

        $rows = array();
        foreach($records as $value){  //First Loop to hydrate
            $rows[] = $this->hydrator->hydrate($value, new PagesModel($this->logger));
        }
        return $rows;
    }
    return array();
}

0 个答案:

没有答案