如果我使用Hydrator将我的查询结果的值放入我的Model I的实例中,则必须循环两次结果(一次用于保湿每一行/对象,然后在实际上再次实现使用结果)。
我知道有各种PDO_FETCH_*
模式,例如FETCH_INTO
和FETCH_CLASS
,它们似乎可以实现相同的功能。我能看到的唯一区别是在水合过程中可能会操纵数据。
我只是试图找出使用水合器的原因,因为它们需要在结果集中进行额外的迭代。我觉得必须有一些理由或方法来使这个额外的迭代可以接受,我很好奇它是什么。我不确定为什么像水合物这样的编程模式如此普遍,因为从表面看它在大多数情况下似乎是浪费。在水化期间操纵数据是使用Hydrators的唯一原因吗?
"全部找到" mapper中的方法:
($this->hydrator
是Zend\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();
}