2016-11-08 10 views
0

私はLaravelアプリケーションを持っていますが、私は780950のレジスタを持つデータベーステーブルを持っています。したがって、これを朗読で取得すると、長い時間がかかり、時間が超過します。例えば最初の30レコードを検索する方法はありますか?私はこれを試してみた:laravelモデルからレコードを取得する

mymodel::all()->take(30)->get(); 

しかし、同じです。

mymodel::where('id','<','30')->get(); 

をそして、それは動作しますが、私はすべてのレコードをページ分割して表示したいので、それは私が欲しいものではありません:それでは、私はちょうど置きます。だから、それはたくさんのレコードだとわかっていますが、最初の30レコードを取得できたら、さらに30レコードを取得します。だから、Laravel 5.3でこれを達成するための最高のエレガントな方法は何ですか?

+1

[documentation](https://laravel.com/docs/5.3/pagination)は、あなたが探しているものを正確に説明しています。 –

答えて

2

あなたは、あなたが実際に「のすべてを取得Model::all()->take(30)->get();言っているんときデータベースのレコードは、私に最初の30 "を与える。あなたがページネーションをしたいのであれば、あなたはちょうどあなたが実際に何をしたいのか最初の30

をつかむために、すべての80万レコードをロードすることがあります、次のとおりです。

$models = Model::paginate($perPage); 

paginate()方法は、自動的に現在のページを決定しますURLのクエリ文字列から取得し、ビューに渡して改ページできるオブジェクトを戻します。

<div class="container"> 
    @foreach ($models as $model) 
     {{ $model->name }} 
    @endforeach 
</div> 

{{ $models->links() }} 
+0

それは完璧に動作します!ありがとう –

2

あなたはskip()take()を使用することができます。

mymodel::skip(0)->take(30)->get(); 

もう一つの方法は、chunk()とのチャンクでデータを取得している:

mymodel::chunk(200, function ($flights) { 
    foreach ($flights as $flight) { 
     // 
    } 
}); 
関連する問題