/**
* @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。是否有人能够发现我做错了什么?
答案 0 :(得分:0)
我的最终解决方案是使用原始SQL查询。
SELECT column FROM documentdata WHERE document_id = ". $docid ." LIMIT 1
我不需要任何记录的特定记录。我无法通过fetch =" EXTRA_LAZY"来获得预期的输出。