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

Laravel如何递归获取指定分类下所有嵌套子分类的ID

问题分析
  • 第一个问题:变量名不统一,代码中定义的变量是$cate_id,但查询条件中使用的是未定义的$cat_id,导致查询条件错误,返回的结果自然不符合预期。
  • 第二个问题:with('recursiveChildren')只是预加载了递归关联的子分类数据,并不会自动把所有层级的id合并到查询结果中,pluck("id")只会返回当前主查询命中的分类id,不会读取关联中的子分类id。
修正方案

你原有的模型关联逻辑不需要改动,只需要新增一个递归提取所有嵌套id的方法,同时修正控制器调用逻辑即可。

// Category模型中新增以下方法
public function getAllNestedIds()
{
    $ids = [$this->id];
    foreach ($this->recursiveChildren as $child) {
        $ids = array_merge($ids, $child->getAllNestedIds());
    }
    return $ids;
}

控制器调用代码修改为:

$cate_id        = 1; // Electronics
$category       = Category::with('recursiveChildren')->find($cate_id);
$categoriesID   = $category->getAllNestedIds();
echo '<pre>'; print_r($categoriesID); die;

注意:按照你给出的表结构,id为1的分类下还有子分类id=11(Computers),所以实际返回的数组会包含11,你给出的期望结果属于漏写该id。

如果分类数据量较大,建议使用数据库层面的递归CTE查询,避免多次查询数据库,性能更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:06:02