2017-04-14 4 views
0

Laravel 5.2のYajraデータセットを使用してdbテーブルをロードしています。私のテーブルには50K以上のレコードが含まれているので、get()メソッドには多くのメモリが必要です。しかし、私はpaginate()方法を使用し、エラーが発生します。 方法getQueryが存在しない:Macroable.phpライン74におけるLarravel 5.2のYajraデータテーブルでページネーションが動作しない理由

BadMethodCallException。

コードは次のとおりです。あなたは、基本的コレクションで作業しているpaginate()呼び出したら

$required_orders = Order::where('order_status','Delivered')->paginate(); 
return Datatables::of($required_orders)->make(true); 

答えて

0

のDataTable通常、QueryBuilderオブジェクトが必要です。 Datatables::collection()を使用することもできますが、データベースからすべてを取得する必要があるため、実行したくない場合があります。

yajraを使用すると、ページングにajax呼び出しを使用する必要があります(Laravelではない)ので、QueryBuilderがページ番号付きデータとメタデータを返すためにカウントなどを実行する必要があります。

ベストオプションは、編集、別のDataTable(API)ルートを作成し、 datatables.net server side processing

をチェックアウトすることです

:あなたのような何かをしたいと思うサーバ側の処理のための例に続き

$(document).ready(function() { 
    $('#yourDatatableId').DataTable({ 
     "processing": true, 
     "serverSide": true, 
     "ajax": "/api/datatables/order" 
    }); 
}); 

などのルート戻り何かしましょう:

$builder = Order::where('order_status', 'Delivered'); 

return Datatables::of($builder)->make(true); 

htmlの部分については、例を参照してください。基本的にはjavascriptで列を定義し、返されたデータから行を埋めます。チェックアウトdatatables server side manualもあり、そこにはstartlengthがあり、フロントエンドのデータテーブルlibによるページ番号付けに使用されます。

+0

こんにちは!ご回答有難うございます。あまりにも多くのメモリを消費することなく効率的に100Kレコードを検索してリストする方法を提案してください。 –

+0

@AliHamza更新された回答を参照 – Robert

+0

!私は上記の手順を試してみましたが、このコマンドを実行すると、 "$ builder = Order :: where( 'order_status'、 'Delivered');" 50K以上のレコードがあるため、多くのメモリを消費します。 laravel 5.2でこの問題をどのように克服できますか? –

関連する問題