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

如何对Laravel中with()关联查询返回的answers数据进行分页?

如何在Laravel的with()中对关联模型进行分页

在Laravel里要实现预加载关联模型同时对关联数据分页,有两种很实用的方案,我给你详细拆解下:

方法一:借助with()的闭包自定义关联查询并分页

你可以直接在with()的闭包中对关联的answers执行分页操作,这种方式会把分页实例直接绑定到主模型的关联属性上:

$questions = Questions::with(['answers' => function ($query) {
    // 可按需添加排序、筛选条件,这里按创建时间倒序分页,每页10条
    return $query->orderBy('created_at', 'desc')->paginate(10);
}])->where('id', $request->id)->first();

小提示:因为是按唯一id查询,用first()替代get()更合理,直接返回单个模型而非集合。

此时$questions->answers是一个LengthAwarePaginator实例,和直接调用paginate()得到的分页对象完全一致,能正常使用links()、currentPage()等分页方法。

方法二:先获取主模型,再手动加载分页后的关联

如果预加载的方式不够灵活,也可以分步操作:先拿到主模型,再手动加载分页后的关联数据:

// 第一步:获取指定问题
$question = Questions::where('id', $request->id)->first();

// 第二步:手动加载并设置分页后的answers关联
$question->setRelation(
    'answers', 
    $question->answers()->orderBy('created_at', 'desc')->paginate(10)
);

这种方式适合需要在加载关联前做额外逻辑处理的场景,比如根据不同业务动态调整分页参数。

额外注意点

分页后的关联属性是分页实例而非普通Eloquent集合,不过在视图中直接循环$question->answers即可,Laravel会自动处理为遍历分页结果的items()集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:50:47