2017-11-20 10 views
0

私はlaravelモデルを使用してデータベースからレコードを取得しています。今回は100-1000行しか取得していませんが、100,000以上の場合はメモリ例外を回避したいと考えています。どうすればこの塊を得ることができますか?Laravelで大量のレコードを取得する方法

マイコード

$getPatients = Patient::select('NameFirst', 'NameLast' , 'Email')->where([['MarketingOpt' , '=', '1'], ['synced' ,'=' , '0']])->get(); 
+5

通常、この場合ページネーションを使用します:) – teeyo

+0

この結果で何をしたいかによって異なります。結果を印刷したいだけなら、チャンクはここでは役に立ちません。 – Jerodev

+0

関連性について:https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=http%3A%2F%2Fqiita.com%2Fryo511%2Fitems%2Febcd1c1b2ad5addc5c9d –

答えて

3

はのpaginateで//数を取得するには、あなたが望む結果の数は、これはLaravelのためである

<div class="container"> 
    @foreach ($getPatients as $patient) 
    {{ $patient->name }} 
    @endforeach 
</div> 
{{ $getPatients->links() }} // this displays the previous and next links 

ノートを表示するには

$getPatients = Patient::select('NameFirst', 'NameLast' , 'Email')->where([['MarketingOpt' , '=', '1'], ['synced' ,'=' , '0']])->paginate(100); 

を返されます5.5

あなたはLaravel Queries: Chunking results

ドキュメントをチャンキング使用する必要があります。ここLaravel Pagination

+0

これは最初の100になるか、それらをまとめると、レコードを取得し続けますか? –

+0

@ゴールドスミスそれはあなたがそれを使いたいかによって異なります。 APIやWebページでそれを使用している場合は、さらにレコードを取得するために、単に 'page'パラメータをクエリURLに追加する必要があります。データを内部的に使用する場合は' chunk'メソッドを使用してください。 –

+0

それはサーバー側では最初の100を取得し、次に次にクリックすると次の100を取得する - 私はあなたがそれを表示したいと思っていたと思っていました。以下の回答を処理するだけであれば良いかもしれません。 – Yeeooow

2

参照のみDB::table('...')->chunk()いいが、これも同様に雄弁のモデルに適用されます。

Patient::select('NameFirst', 'NameLast' , 'Email') 
     ->where([['MarketingOpt' , '=', '1'], ['synced' ,'=' , '0']]) 
     ->chunk(100, function ($patients) { 
    foreach($patients as $patient) { 
     // do whatever you must do here 
    } 
}); 
+0

Yeeooowの回答に関しては、ページングは​​ビューに適用される概念です... OPではデータの表示について言及していないので、データを処理する、例えばスケジュールされたコマンド。 – dafonso

+0

私は仕事でこれを使用しているので、ページネーションを使用することはできません。 –

+0

それは私があなたの質問から考えたものです。あなたがそう思っている場合は、回答を受け入れたものとしてマークしてください。 – dafonso

関連する問題