You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel查询构建器结合DataTables/Yajra懒加载分页异常求助

解决Yajra DataTables加载全量数据而非分页的问题

你当前代码用->get()会直接查询并返回所有10万+条记录,这完全违背了DataTables服务器端分页的设计逻辑。正确的做法是让Yajra DataTables接管查询,自动处理分页、排序、搜索等服务器端操作,具体修改如下:

控制器代码修改

use Yajra\DataTables\Facades\DataTables;

public function loadGoogleProspects()
{
    // 只构建查询构造器,不要调用get()
    $query = DB::table('GoogleProspects')
        ->orderBy('id')
        ->whereNull('deleted_at')
        ->select([
            'GoogleProspects.id as id',
            'searchRequest as searchRequest',
            'websiteEmail as websiteEmail',
            'websiteHomePageURL as websiteHomePageURL',
            'websitePhoneNr as websitePhoneNr',
            'active as activeFlag'
        ]);

    // 交给Yajra处理分页逻辑,返回标准DataTables格式的JSON
    return DataTables::of($query)->make(true);
}

前端配置要求

确保前端DataTables开启服务器端模式,这样才会向服务器发送分页参数(如start、length),Yajra才能据此返回对应页数的数据:

$('#google-prospects-table').DataTable({
    processing: true,
    serverSide: true, // 必须开启这个配置
    ajax: '/your/route/to/loadGoogleProspects', // 对应上面控制器的路由
    columns: [
        { data: 'id' },
        { data: 'searchRequest' },
        { data: 'websiteEmail' },
        { data: 'websiteHomePageURL' },
        { data: 'websitePhoneNr' },
        { data: 'activeFlag' }
    ]
});

关键原理说明

  • 去掉->get()后,查询不会立即执行,Yajra会根据前端传递的分页参数,自动给查询添加LIMIT和OFFSET条件,只查询当前页需要的少量数据。
  • make(true)会返回包含总记录数、过滤后记录数、当前页数据的标准JSON结构,前端DataTables能直接识别并渲染分页。

内容的提问来源于stack exchange,提问作者Jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 01:38:15