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

如何在Laravel Eloquent中为多条件搜索API添加分页与偏移参数

如何在Laravel用户搜索API中添加分页与偏移参数?

首先,我们要在数据库查询层面直接应用分页和偏移参数——千万别先拉取所有数据再做分页,这种做法在数据量大的时候会严重浪费数据库资源。

步骤1:获取并校验分页参数

先从请求里取出新增的offset和paginate参数,同时做合法性校验,避免非法值引发错误:

// 获取分页参数,设置默认值并确保数值合法
$offset = max(0, (int)$request->input('offset', 0)); // 默认偏移0,禁止负数
$perPage = max(1, (int)$request->input('paginate', 10)); // 默认每页10条,最少返回1条

步骤2:在查询中植入分页逻辑

修改你原有的查询代码,用skip()和take()方法替代直接调用get(),这两个方法会让数据库直接执行分页逻辑,效率更高:

$pram = $request->name;
$email= $request->email;
$roleId= $request->role_id;

// 先处理合法的分页参数
$offset = max(0, (int)$request->input('offset', 0));
$perPage = max(1, (int)$request->input('paginate', 10));

$results = User::where('email','like', '%' . $email . '%')
    ->WhereHas('userBasicInfo', function ($query) use ($pram) {
        $query->where('first_name', 'like', '%' . $pram . '%')
            ->orWhere('middle_name', 'like', '%' . $pram . '%')
            ->orWhere('last_name', 'like', '%' . $pram . '%');
    })
    ->with(['userBasicInfo' => function ($query) use ($pram) {
        $query->where('first_name', 'like', '%' . $pram . '%')
            ->orWhere('middle_name', 'like', '%' . $pram . '%')
            ->orWhere('last_name', 'like', '%' . $pram . '%');
    }])
    ->skip($offset) // 跳过指定数量的记录,实现偏移
    ->take($perPage) // 只返回指定数量的记录,实现分页
    ->get()
    ->toArray();

额外优化建议

  • 变量名$pram可以改成$nameKeyword,让代码可读性更强;
  • 如果前端需要做分页导航,可以额外查询总记录数,一起返回给前端:
// 查询符合条件的总记录数
$total = User::where('email','like', '%' . $email . '%')
    ->WhereHas('userBasicInfo', function ($query) use ($pram) {
        $query->where('first_name', 'like', '%' . $pram . '%')
            ->orWhere('middle_name', 'like', '%' . $pram . '%')
            ->orWhere('last_name', 'like', '%' . $pram . '%');
    })
    ->count();

// 返回包含分页元数据的结果
return [
    'data' => $results,
    'total' => $total,
    'offset' => $offset,
    'paginate' => $perPage
];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:03:57