【问题标题】:How to limit results per page in Yajra datatables如何限制 Yajra 数据表中每页的结果
【发布时间】:2020-11-26 05:27:27
【问题描述】:

如何限制 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 个表行,这会影响应用程序的性能。有什么想法吗?

【问题讨论】:

  • 与其拉取所有结果,不如尝试限制控制器中的结果。
  • 已经尝试过使用limit(10),但它只给了我10个结果,并且分页只有1 page
  • 您能分享一下$results 是什么吗?
  • @linktoahref 请检查我的更新
  • 对不起,我的意思是你的控制器代码。您是否尝试过 Eloquent Query Builder 方式而不是集合?

标签: laravel datatable yajra-datatable


【解决方案1】:

我最终只是在下面添加了这些代码,而不是使用 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 端点(路由)抛出了请求。

【讨论】:

  • 你好@Jie,你是怎么得到total_filtered参数的?
  • @skywalskurt 通过计算某些条件后的查询结果。
【解决方案2】:

这对我有用,而且代码更短

return Datatables::of($data)->setTotalRecords(500)->make(true);

setTotalRecords() 是您寻找的最佳答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多