我正在使用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()
答案 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,您会看到start
和length
,它们将用于前端数据库lib的分页。