Mus*_*abe 6 php mysql laravel eloquent
我有一个非常非常简单的查询
select *
from `users`
where (`active` = 1 and `newsletter` = 1) and (`terminated` = 0 or (`terminated` = 1 and `newsletter_terminated` = 1));
Run Code Online (Sandbox Code Playgroud)
我正在用这样的口才建立它(当我使用它时,上面的查询得到输出 toSql()
$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();
Run Code Online (Sandbox Code Playgroud)
但是当我执行这个脚本时,我收到了错误
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
Run Code Online (Sandbox Code Playgroud)
当我在get方法中编写特定列时,就像get(['id']);它没有问题一样工作.但我仍然不明白为什么它不起作用.似乎有内存泄漏,但在哪里?
当我在我的SQL客户端中执行查询时,查询将以3毫秒完成,因此看起来不会有太多数据.不幸的是,我没有安装流浪盒上的xdebug,所以我目前无法获得stacktrace.
我也遇到过类似的问题,而且我认为这不是 Laravel 特有的——它与嵌入式闭包有关。基本上,解释这些闭包的过程会溢出 128MB,而这对于嵌入式闭包来说可能还不够。
要么尝试增加 php.ini 中的内存限制(512MB 应该可以解决问题),解开闭包,或者只是使用原始 SQL 语句来进行该查询。