数据表通常需要一个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中解决这个问题? –