0

所以我有一个包含 3500 个元素的数据库表。当我尝试显示此数据时,我收到此消息:

致命错误:C:\Program Files\EasyPHP-5.3.8.0\www\Symfony\vendor\doctrine\lib\Doctrine\ORM\Mapping\ClassMetadata.php 中允许的内存大小为 134217728 字节已用尽(试图分配 77 个字节)第 344 行

4

2 回答 2

1

我认为您正在寻找一个迭代器。
本文将向您展示如何处理大数据。

$q = $this->_em->createQuery("<DQL to select the objects I want>");
$iterableResult = $q->iterate();
while (($row = $iterableResult->next()) !== false) {
        // do stuff with the data in the row, $row[0] is always the object
        $this->_em->detach($row[0]); // detach from Doctrine, so that it can be GC'd immediately
 }

此代码不是将所有数据加载到单个数组中,而是创建了一个迭代器来防止大加载和此类错误。

但是,如果您只是想了解如何增加 PHP 的内存大小,请查看此答案

ini_set('memory_limit', '1G');
于 2013-03-15T08:40:37.793 回答
0

谷歌的“分页” :) 通常没有理由一次获取每个实体,因为(例如)谁想要等待并阅读单个页面上包含 3500 个条目的巨大列表?如果您确实需要它们(例如用于进一步处理),请分块读取和处理它们。

顺便说一句:这不是 S2 的错,内存有限 :)

于 2013-03-15T08:34:19.990 回答