2014-01-27 2 views
0

В laravel 4.1, когда я разбиваю коллекцию, я не могу print_r или var_dump коллекцию без ->toArray().Laravel - Can not print_r paginated collection - Memory Issue

Я просто получил белый экран смерти wsod.

я получаю ту же проблему, используя как красноречивый и QueryBuilder

Пример Контроллер

public function index() 
{ 
    $products = $this->product->with('category')->paginate(5); 
return View::make('admin.products.index', compact('products')); 
} 

Пример Просмотр Doesnt работы

<pre><?php print_r($products); ?></pre> 

Пример Считает ли работа

<pre><?php print_r($products->toArray()); ?></pre> 

Единственной обратной связью я получаю от моего laravel.log файла

[2014-01-27 14:50:34] production.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Allowed memory size of 134217728 bytes exhausted (tried to allocate 130023424 bytes)' in /Applications/AMPPS/www/testapp.lar/app/storage/views/18e32e837eb584960d223cd8728fd06e:38 
Stack trace: 
#0 [internal function]: Illuminate\Exception\Handler->handleShutdown() 
#1 {main} [] [] 

Кто-нибудь знает, что происходит с этим массовым потреблением памяти или как исправить?

+0

Возможно, вы уже знаете, как исправить ... используйте 'toArray()'! – jszobody

+0

Вы пытаетесь распечатать этот объект вместе со всеми его внутренними данными. Бесполезный. 'toArray()' или 'toJson()' на помощь! – Andreyco

+0

Это не имеет смысла ... Какие дополнительные данные? Еще несколько полей? Я пытаюсь выяснить, как мне получить доступ к разбитым на страницы данным в моем представлении. Таким образом, я использую 'print_r ($ products);' потому что $ products-> total или '$ products-> per_page' не работает ... – Gravy

ответ

0

Когда вы печатаете_r ($ products), вы по существу печатаете массивный объект, который использует Laravel для запроса и получения данных. В основном вы получите огромное количество текста, что, очевидно, подавляет вашу машину. Вам это не нужно/нужно.

Вы хотите итерировать коллекцию продуктов и позволить Laravel магически возвращать значения.

foreach ($products as $v) { 
    echo $v->product_name; 
} 

Если вы предпочитаете работать с массивами, то вы можете преобразовать коллекцию $ products в массив и повторить ее.

$products = $products->toArray(); 

foreach ($products['data'] as $v) { 

} 

При преобразовании постраничной коллекции в массив, массив будет построен следующим образом, при этом ссылку на [ «данные»] выше.

Массив ( [всего] => ... [per_page] => ... [current_page] => ... [LAST_PAGE] => ... [с] =>. .. [to] => [данные] => массив (...) )

+0

Спасибо. Просто для подтверждения ... Означает ли это, что я ** должен ** преобразовать объект в массив, чтобы получить доступ к информации разбивки на страницы? Невозможно получить доступ к этой информации через объект $ products по умолчанию? – Gravy