Странное поведение с помощью метода doctrine_record :: free () в цикле - PullRequest
0 голосов
/ 23 сентября 2011

все,

Я зацикливаюсь в Doctrine_Query :: execute () со многими связями, и я получаю запись на каждую итерацию. Нет проблем.

Чтобы сэкономить память, я бы хотел использовать free () для записи памяти с Doctrine_Record :: бесплатно ().

Первая итерация, без проблем, но на следующей мой новый объект слабое отношение Пример:

$q = Doctrine_Query::create() 
  ->From(..) 
  ->leftJoin(...) 
  ->innerJoin(Relationship) 
  ->where(...) 
  ->andWhere(...); 
foreach($q->execute() as $r) 
{ 
   $val = $r->Relationship->get(colx); 
   $r->free(true); 
} 

На второй итерации я получаю новую запись, но без взаимосвязи innerJoin ???

Любая идея ...

Спасибо за ваш совет

1 Ответ

0 голосов
/ 23 сентября 2011

Как указано в комментариях к методу и в справочнике API

Помогает освободить память, занятую объектом. Обрезает все ссылки, которые объект имеет на другие объекты, и удаляет объект из пула экземпляров. Примечание: объект больше не может использоваться после вызова free (). Любые операции, выполненные с объектом впоследствии, могут привести к непредсказуемым результатам.

Не следует использовать free(), особенно если вы собираетесь использовать запись впоследствии. Единственный случай, когда вам нужно его использовать, это если вы загружаете очень большое количество записей и вам нужно освободить память.

...