当仅从ArrayCollection中检索第一项时,如何避免使用内存或清除内存?

时间:2016-11-11 04:00:45

标签: php symfony memory orm doctrine

/**
* @OneToMany(targetEntity="DocumentData", mappedBy="document")
**/
private $records;

我目前有上述内容。我使用下面的内容来检索第一条记录。

function getFirstRecord() {
  if (isset($this->records[0])) {
    return $this->records[0]->getData();
  }
  else {
    return FALSE;
  }
}

它使用了太多的内存(在循环100个文档后,3MB到128MB)。我希望这是因为在这一行:

if (isset($this->records[0])) {

整个$ records ArrayCollection被加载到内存中,但我只需要$ records [0]。我有第一张唱片后如何避免这种情况或从记忆中清除它?

修改

我现在有:

  /**
  * @OneToMany(targetEntity="DocumentData", mappedBy="document", fetch="EXTRA_LAZY")
  **/
  private $records;

  function getFirstRecord() {
    $header;
    if ($this->records->containsKey(0)) {
      $header = $this->records->get(0);
      return $header->getData();
    }
    else {
      return FALSE;
    }
  }

不幸的是,get和containsKey方法仍然加载整个ArrayCollection。是否有人能够发现我做错了什么?

1 个答案:

答案 0 :(得分:0)

我的最终解决方案是使用原始SQL查询。

SELECT column FROM documentdata WHERE document_id = ". $docid ." LIMIT 1

我不需要任何记录的特定记录。我无法通过fetch =" EXTRA_LAZY"来获得预期的输出。