首页 > 解决方案 > 如何限制 Yajra 数据表中每页的结果

问题描述

如何限制 Yajra 数据表中每一页的数据结果?目前我正在使用下面的代码:

控制器

return Datatables::of(collect($results))->make(true);

$results变量只是数据库中的一组数据。

JS

$('table.dataTableAjax').DataTable({
     "processing": true, // Make this true, to show the "Processing" word while loading
     "serverSide": true,
     "paging": true,
     "pageLength": 10,
     "ordering": false, // Make this false, to disable sorting
     "ajax": "..."
});

来自服务器的示例数据

{
    "data":[
        { "name": "Bob", "Age": 30 },
        { "name": "Billy", "Age": 33 },
        { "name": "Megan", "Age": 31 }
    ]
}

因此,例如,第一页应加载 10 行,下一页应再次加载 10 行,依此类推。但是发生的事情是它加载了 5000 多行,并在客户端将它们切割成 10 个表行,这会影响应用程序的性能。任何的想法?

标签: laraveldatatableyajra-datatable

解决方案


最后我只是在下面添加了这些代码,而不是使用 yajra 来实现功能。

$limit = request('length');
$start = request('start');

$query->offset($start)->limit($limit);

return response()->json([
    "draw" => intval(request('draw')),  
    "recordsTotal"    => intval(User::count()),  
    "recordsFiltered" => intval($total_filtered),
    "data" => $results
]);

一切正常,加载速度更快。我没有注意到数据表实际上向 laravel 端点(路由)抛出了请求。


推荐阅读