我正在使用laravel模型从数据库中获取记录。这次我只得到100-1000行,但如果它超过10万,那么我想避免内存不足异常。我怎么能得到这块?
我的代码
$getPatients = Patient::select('NameFirst', 'NameLast' , 'Email')->where([['MarketingOpt' , '=', '1'], ['synced' ,'=' , '0']])->get();
答案 0 :(得分:3)
要获取// paginate中的数字是您要返回的结果数
$getPatients = Patient::select('NameFirst', 'NameLast' , 'Email')->where([['MarketingOpt' , '=', '1'], ['synced' ,'=' , '0']])->paginate(100);
显示
<div class="container">
@foreach ($getPatients as $patient)
{{ $patient->name }}
@endforeach
</div>
{{ $getPatients->links() }} // this displays the previous and next links
请注意,这适用于Laravel 5.5
答案 1 :(得分:2)
您应该使用分块Laravel Queries: Chunking results
文档仅指DB::table('...')->chunk()
,但这也适用于Eloquent模型。
Patient::select('NameFirst', 'NameLast' , 'Email')
->where([['MarketingOpt' , '=', '1'], ['synced' ,'=' , '0']])
->chunk(100, function ($patients) {
foreach($patients as $patient) {
// do whatever you must do here
}
});