2013-03-15 4 views
0

Итак, у меня есть таблица базы данных, содержащая 3500 элементов. И когда я пытаюсь отобразить эти данные, я получаю сообщение:Максимальный размер данных для Symfony2

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 77 bytes) in C:\Program Files\EasyPHP-5.3.8.0\www\Symfony\vendor\doctrine\lib\Doctrine\ORM\Mapping\ClassMetadata.php on line 344

ответ

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'); 
0

Google для «пагинацией» :) Обычно там никогда не повод, чтобы принести каждый объект сразу, потому что (к примеру), кто хочет ждать за и прочитать огромный список с 3500 записями на одной странице? Если они вам действительно нужны (например, для дальнейшей обработки), прочитайте и обработайте их в кусках.

BTW: Это не S2s вина, что память ограничена :)

+0

На самом деле я использую плагин DataTables Jquery, который отображает уточнено количество строк сразу используя разбиение на страницы. Итак, какая память ограничена? и как его продлить (если это возможно)? –

+0

JQuery не может получить доступ к самой базе данных, таким образом, вы, вероятно, можете сделать такую ​​оптимизацию в бэкэнд, не так ли? ;) – KingCrunch

Смежные вопросы