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

如何使用Laravel Eloquent获取分类下的2个子分类?为何仅单个分类返回2个?

如何用Laravel Eloquent获取分类下的2个子分类

单个分类获取2个子分类

如果针对单个分类,直接在关联关系上调用take()方法即可:

// 获取目标分类
$category = Category::find($categoryId);
// 获取该分类下的2个子分类
$subcategories = $category->children()->take(2)->get();

也可以链式调用一步完成:

$subcategories = Category::find($categoryId)->children()->take(2)->get();

批量获取多个分类(每个分类带2个子分类)

如果要一次性获取多个分类,且每个分类仅加载2个子分类,需要用with()结合闭包来单独限制每个父分类的关联数量:

$categories = Category::with(['children' => function ($query) {
    $query->take(2);
}])->get();

为什么仅单个分类返回2个子分类?

这种问题通常出现在批量加载关联时,take(2)被全局应用到了整个关联查询,而非每个父分类单独限制。

常见错误示例

如果写成下面这样,会导致所有分类的子分类总数仅返回2条,而非每个分类各2条:

// 错误写法:全局限制子分类总数为2
$categories = Category::with('children')->take(2)->get();

另外,若你在模型的关联方法中直接定义了take(2),批量加载时Laravel会合并所有子分类的查询,最终只有第一个父分类能拿到2条数据,其他分类的子分类会被过滤。

正确解决方式

必须在with()的闭包内单独设置关联数量限制,Laravel会为每个父分类单独执行子分类查询,确保每个分类都能返回2个子分类:

$categories = Category::with(['children' => function ($query) {
    $query->take(2);
}])->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:20:46