所以我有一个包含3500个元素的数据库表。当我尝试显示这些数据时,我收到了这条消息:
致命错误:在C:\ Program Files \ EasyPHP-5.3.8.0 \ www \ Symfony \ vendor \ doctrine \ lib \ Doctrine \ ORM \ Mapping \ ClassMetadata中,允许的内存大小为134217728个字节(尝试分配77个字节)第344行的.php
答案 0 :(得分:1)
我认为你正在寻找一个迭代器 This article将向您展示如何处理大数据。
$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的内存大小,请查看this answer
ini_set('memory_limit', '1G');
答案 1 :(得分:0)
谷歌的“分页”:)通常没有理由一次获取每个实体,因为(例如)谁想等待并在一个页面上读取一个包含3500个条目的巨大列表?如果您真的需要它们(例如进行进一步处理),请以块的形式读取和处理它们。
btw:这不是S2s的错,内存是有限的:)