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

Laravel中使用first()获取单模型后如何对morphToMany关联分页

Laravel多态关联模型分页最优实现方案

原有在with闭包内调用paginate的写法不符合Laravel预加载的设计逻辑:with执行关联查询时只会提取结果集,不会保留分页器实例,因此仅能实现limit效果,丢失current_page、total等分页元数据。

推荐实现方案

直接通过分类模型的关联关系单独调用分页方法,代码逻辑最简洁,也能得到完整的分页器实例:

// 第一步:查询目标分类
$category = $this->blogCategory->whereId($categoryId)->firstOrFail();
// 第二步:对多态关联关系直接调用分页方法
$blogPosts = $category->blogPosts()
    // 可自由追加查询条件、排序规则
    ->orderBy('created_at', 'desc')
    ->paginate(10); // 自定义每页展示条数
  • 上述代码返回的$blogPosts是完整的LengthAwarePaginator实例,包含所有所需分页参数:current_page(当前页)、last_page(总页数)、total(总条数)、per_page(每页条数)等
  • 如果需要同时返回分类信息和分页文章,直接组装返回结构即可:
return [
    'category' => $category,
    'posts' => $blogPosts
];
// 接口场景下Laravel会自动把分页器序列化为包含meta、data的标准结构

注意事项

  • 不要在with预加载的闭包内执行分页,该场景下预加载的批量查询逻辑和分页的单页查询逻辑冲突,没有额外收益
  • 如果需要对关联数据做筛选,直接在$category->blogPosts()后链式调用查询方法即可,和普通查询用法完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:57:04