Если я использую Hydrator, чтобы поместить значения результатов моего запроса в экземпляр моей Модели, мне придется дважды просмотреть результаты (один раз для гидратации каждой строки / объекта, а затем снова, когда я фактически использую результаты).
Я знаю, что есть различные PDO_FETCH_*
такие режимы, как FETCH_INTO
а также FETCH_CLASS
которые, кажется, достигают той же функциональности. Единственное отличие, которое я вижу, — это возможность манипулировать данными во время гидратации.
Я просто пытаюсь выяснить причину использования гидраторов, когда им требуется дополнительная итерация по набору результатов. Я чувствую, что должна быть какая-то причина или метод, чтобы сделать эту дополнительную итерацию приемлемой, и мне интересно, что это. Я не уверен, почему такой шаблон программирования, как гидраторы, так популярен, потому что на первый взгляд он кажется пустой тратой в большинстве ситуаций. Является ли манипулирование данными во время гидратации единственной причиной использования гидраторов?
Метод «Найти все» из картографа:
($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();
}
Задача ещё не решена.
Других решений пока нет …