Есть ли способ гидратации объектов без циклического повторения наборов результатов дважды?

Если я использую 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();
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]