循环中使用doctrine_record :: free()方法的奇怪行为

时间:2011-09-22 20:19:54

标签: php doctrine

全部,

我在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); 
} 

在第二次迭代中,我获得了新记录但没有内部关系???

任何想法......

感谢您的建议

1 个答案:

答案 0 :(得分:0)

正如方法评论和API reference

中所述
  

帮助释放实体占用的内存。将实体的所有引用剪切到其他实体,并从实例池中删除该实体。注意:调用free()后,实体不再可用。 之后对该实体进行的任何操作都可能导致不可预测的结果。

您不应该使用free(),特别是如果您打算之后使用该记录。您需要使用它的唯一情况是,如果您正在加载大量记录并且需要释放内存。