我今天试着工作,但是我被这个错误打断了:
[Tue Aug 05 09:08:48 2014] [error] [client 93.103.209.208] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 130968 bytes) in /var/www/dev/vendor/laravel/framework/src/Illuminate/Database/Eloquuent/Model.php on line 643
导致错误的控制器/方法:
public function show($id)
{
return $this->layout->content = View::make('users.show', array(
'user' => User::find($id)
));
}
然而,如果我用DB::table('users')->where('id', '=', $id)->first();
代替User::find($id)
,它就像一个魅力。雄辩家这是怎么回事?
我试着增加我的memory_limit
在php.ini为apache &到200- 2.3米,但无济于事。我还尝试将其设置为-1无限制,只是为了看看它是否会起作用,但没有,然后我根本没有从服务器得到响应。是的,我确实在每次更改后重新启动apache。
这个问题是由于在我的User模型中有一个与其自身的关系方法。基本上在我的User类中,我有User { public function user() { return $this->hasOne('User'); } }
,它创建了一个循环。
仔细分析一下错误消息—PHP的内存限制为128MB,有问题的行试图分配额外的~131KB
使用剩余内存的变量可能与这个函数无关,很可能只是这部分代码寻找它的131KB,只是不断地将您推到128MB的限制。
我会使用一些日志机制来记录代码中不同位置memory_get_usage()的返回值。这应该给你一些指示,当内存被分配,并允许你弄清楚如何优化代码。
将代码修改为:
...
return $this->layout->content = View::make('users.show')->with(array('user' => User::find($id)));
...
// or WITHOUT return
$this->layout->content = View::make('users.show')->with(array('user' => User::find($id)));