Я использую Doctrine 1.2 в проекте Symfony.
Я бы хотел перебрать доктрину, у меня есть объект Doctrine_Query, я хочу перебрать "набор результатов" этого запроса, потому что я могу иметь100K записей и не хочу исчерпывать память.
Что-то вроде:
$it = $query->iterate();
while($it->next()) {
$obj = $it->getOjbect();
//Do some stuff with this object
}
Я понял, как это сделать, используя собственный гидратор.
ДляПроект Symfony, в ProjectConfiguration.class.php:
public function configureDoctrine(Doctrine_Manager $manager)
{
$manager->registerHydrator('my_hydrator', 'Doctrine_Hydrator_MyHydrator');
}
В контроллере:
$this->filename = $query->execute(array(), 'my_hydrator');
Added in lib folder :
class Doctrine_Hydrator_MyHydrator extends Doctrine_Hydrator_Abstract
{
public function hydrateResultSet($stmt)
{
$filename = sfConfig::get('sf_data_dir').'/'.time().'.csv';
$fh = fopen($filename,'w');
while($f = $stmt->fetch(Doctrine_Core::FETCH_BOTH)){
$f = array(
$f[0],
$f[1],
$f[2],
$f[3],
$f[4],
$f[5],
$f[6],
$f[7],
$f[8],
);
fputcsv($fh, $f);
}
fclose($fh);
return $filename;
}