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
相关产品推荐
相关产品推荐

