php – 使用Eloquent查询耗尽了允许的内存限制

前端之家收集整理的这篇文章主要介绍了php – 使用Eloquent查询耗尽了允许的内存限制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个非常非常简单的查询

@H_404_5@select * from `users` where (`active` = 1 and `newsletter` = 1) and (`terminated` = 0 or (`terminated` = 1 and `newsletter_terminated` = 1));

我正在用这样的雄辩来构建它(当我使用tosql()时,上面的查询得到输出

@H_404_5@$recipients = User::where([ 'active' => 1,'newsletter' => 1 ])->where(function ($query) { $query->where('terminated',0) ->orWhere(function ($query){ $query->where('terminated',1) ->where('newsletter_terminated',1); }); })->get();

但是当我执行这个脚本时,我收到了错误

@H_404_5@Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in /xxx/eloquent/vendor/illuminate/database/Illuminate/Database/Connection.PHP on line 303

当我在get方法中编写特定列时,比如get([‘id’]);它没有问题.但我仍然不明白为什么它不起作用.似乎有内存泄漏,但在哪里?

当我在我的sql客户端中执行查询时,查询将以3毫秒完成,因此看起来不会有太多数据.不幸的是,我没有安装流浪盒上的xdebug,所以我目前无法获得stacktrace.

最佳答案
类似的事发生在我身上.检查模型中的$with属性.也许你有太多自动加载的关系.尽量不这样做.每个对象分配内存.如果你有15000行有许多关系,并且你急切地加载每一行,那么记忆就会消失.我结束了写一个原始的mySQL查询,问题解决了.

猜你在找的MySQL相关文章