我今天尝试过工作但是我被这个错误打断了:
[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)
));
}
但是,如果我将User::find($id)
替换为DB::table('users')->where('id', '=', $id)->first();
,它就像魅力一样。 Eloquent在这里发生了什么?
我尝试在php.ini中增加我的memory_limit
for apache& cli到200-230M但它没有帮助。我也尝试将它设置为-1无限只是为了看它是否会工作但是没有我只是得不到服务器的响应。是的,我在每次更改后都重启了apache。
原因
问题是我的User模型中有一个关系方法的结果。基本上在我的User类中,我有User { public function user() { return $this->hasOne('User'); } }
创建了一个循环。
答案 0 :(得分:2)
只是解析错误消息 - 你的PHP内存限制为128MB,有问题的行试图分配额外的~131KB
使用内存其余部分的变量可能与此函数无关,很可能就是这部分代码寻找其131KB只是一直在推动你超过128MB的限制。
我使用一些日志记录机制来记录代码中不同点的memory_get_usage()的返回值。这应该有助于您了解何时分配内存并让您了解如何优化代码。
答案 1 :(得分:0)
将您的代码更改为以下内容:
...
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)));