【问题标题】:Laravel Yajra Datatable not working with big dataLaravel Yajra Datatable 无法处理大数据
【发布时间】:2021-08-02 21:47:21
【问题描述】:

我有一个巨大的记录存储在一个需要时间加载的数据库中,所以我考虑使用 yajra laravel 数据表。我将 laravel 版本 7 与 Yajra Datatables 9.18 一起使用。

所以,只有 10 条记录必须来自数据库在第一个页面加载之后,当我点击下一步按钮时,接下来的 10 条记录应该来。

这是我的代码

后台

考虑这一行 1

 $vouchers = Voucher::where('status', 'InActive')->orderBy('id', 'desc')->get(); // more than 800000 entries 

最后,循环后我将其返回为

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

前端

    processing: true,
    serverSide: true,
    ajax: "{{ route('vouchers_report') }}",

我在堆栈溢出和其他一些平台上检查了很多答案,但每个人都要求我使用

"pageLength": 10,

但这里的问题在于第 1 行,因为我一次获取所有条目。加载时间太长,然后没有使用 pageLength 的逻辑,因为它没有从后端到达前端。

我尝试了很多选项,但根本不起作用。

【问题讨论】:

    标签: laravel datatables yajra-datatable


    【解决方案1】:

    您应该将查询构建器提供给 Datatables 而不是模型集合。

    试试

    $vouchers = Voucher::where('status', 'InActive')->orderBy('id', 'desc');
    return Datatables::of($vouchers)->make(true);
    

    请注意,我省略了 ->get() 部分。

    最好让数据表也控制排序部分,但这是第 2 步。

    【讨论】:

    • 如果我使用这种模式,那么如何在前端使用 laravel 模型关系访问数据?
    • 当省略->get() 方法调用时,Datatables 将在数据库级别执行排序、搜索和分页。之后,它会在后台执行->get(),因此您仍然可以在前端获得相同的信息。
    • 你可以使用 Laravel 的 with() 方法加载关系。另见yajrabox.com/docs/laravel-datatables/master/relationships
    • 多么完美的答案。一直在考虑这个,因为数据已经加载。在大数据上,这可能是一个大问题。
    猜你喜欢
    • 2011-07-28
    • 2018-04-26
    • 2018-03-03
    • 2020-12-26
    • 2019-02-15
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多