Laravel - 无法print_r分页集合 - 内存问题

时间:2014-01-27 14:55:18

标签: php laravel pagination out-of-memory eloquent

在laravel 4.1中,当我对一个集合进行分页时,我无法在没有->toArray()的情况下print_r或var_dump该集合。

我只是得到一张白色的死亡屏幕wsod

使用Eloquent和QueryBuilder

我遇到了同样的问题

示例控制器

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

示例视图不起作用

<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} [] []

是否有人知道这种大量内存消耗或如何修复会发生什么?

1 个答案:

答案 0 :(得分:0)

当你print_r($产品)时,你实际上是在打印Laravel用来查询和获取数据的大量对象。你基本上会得到大量的文本,这显然会压倒你的机器。你不需要/想要那个。

你想迭代$ products集合,让Laravel神奇地返回值。

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

如果您更喜欢使用数组,那么您可以将$ products集合转换为数组并迭代它。

$products = $products->toArray();

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

}

将分页集合转换为数组时,数组结构如下,因此对上面的['data']的引用。

阵 (     [total] =&gt; ...     [per_page] =&gt; ...     [current_page] =&gt; ...     [last_page] =&gt; ...     [from] =&gt; ...     [to] =&gt; ...     [data] =&gt;阵列(...) )