數據表通常需要一個QueryBuilder的對象,一旦你叫paginate()
你基本上是一個收集。您可以使用Datatables::collection()
,但您不希望這樣做,因爲它需要您從數據庫中獲取所有您不想執行的操作。
使用yajra你應該使用ajax調用paginate,它將處理分頁(而不是Laravel),因此它需要QueryBuilder執行計數等來返回分頁數據和元數據。
最好的辦法是創建一個單獨的數據表(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,你會看到start
和length
,這將用於前端數據表lib的分頁。
嗨羅伯特!感謝您的回答。你能否建議我一種方法來檢索並高效地列出100K記錄而不消耗太多內存? –
@AliHamza查看更新回答 – Robert
!我已經嘗試了上面提到的過程,但問題是,當我運行這個命令「$ builder = Order :: where('order_status','Delivered');」由於有超過5萬條記錄,它會消耗大量內存。 如何在laravel 5.2中解決這個問題? –