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

Google for "pagination" :)通常、すべてのエンティティを一度に取得する理由はありません。たとえば、1ページに3500エントリの巨大なリストを待って読みたい人はいるでしょうか。それらが本当に必要な場合(たとえば、さらに処理するため)、それらをチャンクで読み取って処理します。

ところで:メモリが制限されているのはS2のせいではありません:)

于 2013-03-15T08:34:19.990 に答える