为什么分页不适用于Laravel 5.2中的Yajra数据表

时间:2017-04-14 06:51:59

标签: laravel-5 pagination yajra-datatable

我正在使用Laravel 5.2中的Yajra数据表加载数据库表。我的表包含50K以上的记录,因此<label for="event_icon">Choose Icon: </label> <select name="event_icon" id="event_icon"> <option>Select An Icon</option> <option value="vaisakhi.jpg"><img src="icons/vaisakhi.jpg" width="20px" height="20px"/></option> <option value="cake.png"><img src="icons/cake.png" width="20px" height="20px"/></option> <option value="game.png"><img src="icons/game.png" width="20px" height="20px"/></option> </select> 方法需要大量内存。但是,我使用get()方法,发生错误:

  

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

代码是:

paginate()

1 个答案:

答案 0 :(得分:2)

数据表通常需要一个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,您会看到startlength,它们将用于前端数据库lib的分页。