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

Laravel分类下仅获取3篇博客问题:当前代码返回全量数据

每个分类仅取3条博客的实现方案

你当前的代码$categories = Category::has('blogs')->take(10)->get();里的take(10)是限制分类的数量,不是每个分类下的博客条数,所以会返回每个分类的所有关联博客。要实现每个分类只取3篇,需要在关联查询里做限制:

直接用with结合闭包就能搞定,修改后的代码:

$categories = Category::has('blogs')
    ->with(['blogs' => fn($query) => $query->take(3)])
    ->take(10)
    ->get();

要是你的Laravel版本不支持短闭包(PHP 7.4+才支持),就写成完整的闭包形式:

$categories = Category::has('blogs')
    ->with(['blogs' => function ($query) {
        $query->take(3);
    }])
    ->take(10)
    ->get();

关键逻辑说明

  • has('blogs'):过滤掉没有关联博客的分类,和你原有逻辑保持一致
  • 外层take(10):控制最多获取10个分类(你的场景里只有2个,不影响最终结果)
  • 关联闭包里的take(3):针对每个分类的博客关联做限制,确保每个分类仅返回3条博客

如果遇到旧版本Laravel中关联take不生效的问题(比如所有分类都返回相同的3条博客),可以改用子查询方式实现:

$categories = Category::has('blogs')
    ->with(['blogs' => function ($query) {
        $query->whereIn('id', function ($subQuery) {
            $subQuery->select('id')
                ->from('blogs')
                ->whereColumn('category_id', 'categories.id')
                ->take(3);
        });
    }])
    ->take(10)
    ->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:39:25