为什么分页不适用于 Laravel 5.2 中的 Yajra 数据表
Why pagination is not working with Yajra data tables in Laravel 5.2
我正在 Laravel 5.2 中使用 Yajra 数据 table 加载数据库 table。我的 table 包含超过 50K 的记录,因此 get()
方法占用大量内存。但是,我使用paginate()
方法,出现错误:
BadMethodCallException in Macroable.php line 74:
Method getQuery does not exist.
代码是:
$required_orders = Order::where('order_status','Delivered')->paginate();
return Datatables::of($required_orders)->make(true);
Datatables 通常需要一个 QueryBuilder 对象,一旦你调用 paginate()
你基本上是在使用一个集合。您可以使用 Datatables::collection()
,但您不希望这样做,因为它需要您从数据库中获取所有内容,而您不想这样做。
使用 yajra 你应该使用 ajax 调用来分页,它将处理分页(不是 Laravel),因此它需要 QueryBuilder 执行计数等 return分页数据和元数据。
最好的选择是创建一个单独的数据表 (api) 路由,然后查看
datatables.net server side processing
编辑:
按照服务器端处理的示例,您需要执行如下操作:
$(document).ready(function() {
$('#yourDatatableId').DataTable( {
"processing": true,
"serverSide": true,
"ajax": "/api/datatables/order"
} );
} );
并让路线 return 类似于:
$builder = Order::where('order_status', 'Delivered');
return Datatables::of($builder)->make(true);
对于 html 部分,查看示例,基本上您可以在 javascript 中定义列,它会从数据 returned 中填充您的行。还要检查 datatables server side manual,在那里你会看到 start
和 length
,它们将被前端数据表库用于分页。
我正在 Laravel 5.2 中使用 Yajra 数据 table 加载数据库 table。我的 table 包含超过 50K 的记录,因此 get()
方法占用大量内存。但是,我使用paginate()
方法,出现错误:
BadMethodCallException in Macroable.php line 74: Method getQuery does not exist.
代码是:
$required_orders = Order::where('order_status','Delivered')->paginate();
return Datatables::of($required_orders)->make(true);
Datatables 通常需要一个 QueryBuilder 对象,一旦你调用 paginate()
你基本上是在使用一个集合。您可以使用 Datatables::collection()
,但您不希望这样做,因为它需要您从数据库中获取所有内容,而您不想这样做。
使用 yajra 你应该使用 ajax 调用来分页,它将处理分页(不是 Laravel),因此它需要 QueryBuilder 执行计数等 return分页数据和元数据。
最好的选择是创建一个单独的数据表 (api) 路由,然后查看 datatables.net server side processing
编辑:
按照服务器端处理的示例,您需要执行如下操作:
$(document).ready(function() {
$('#yourDatatableId').DataTable( {
"processing": true,
"serverSide": true,
"ajax": "/api/datatables/order"
} );
} );
并让路线 return 类似于:
$builder = Order::where('order_status', 'Delivered');
return Datatables::of($builder)->make(true);
对于 html 部分,查看示例,基本上您可以在 javascript 中定义列,它会从数据 returned 中填充您的行。还要检查 datatables server side manual,在那里你会看到 start
和 length
,它们将被前端数据表库用于分页。