0

我正在使用 Laravel 5.2 中的 Yajra 数据表加载一个数据库表。我的表包含超过 50K 的记录,因此该get()方法占用大量内存。但是,我使用该paginate()方法,出现错误:

Macroable.php 第 74 行中的 BadMethodCallException:方法 getQuery 不存在。

代码是:

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

1 回答 1

4

Datatables 通常需要一个 QueryBuilder 对象,一旦你调用paginate()你基本上是在使用一个集合。您可以使用Datatables::collection(),但您不希望这样做,因为它要求您从数据库中获取所有内容,而您不想这样做。

使用 yajra 您应该使用 ajax 调用来分页,它将处理分页(不是 Laravel),因此它需要 QueryBuilder 执行计数等以返回分页数据和元数据。

最好的选择是创建一个单独的数据表 (api) 路由,并检查 datatables.net 服务器端处理

编辑:

按照服务器端处理的示例,您需要执行以下操作:

$(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 中定义列,它将根据返回的数据填充您的行。还要检查数据表服务器端手册,在那里你会看到startlength,它将被前端数据表库用于分页。

于 2017-04-14T09:33:04.103 回答