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

Laravel模型中获取包含ID与标题的所有父级分类数组的代码问题及解决需求

解决Laravel模型递归获取父级分类ID与标题数组的问题

你遇到的问题是因为递归方法里的数组合并语法错误,导致无法正确拼接父级数组和当前分类的信息。下面是修正后的实现,同时保持和原getParentsNames方法一致的层级顺序(从最顶层父级到当前分类):

public function getParentsNamesArray() {
    // 定义当前分类的数组元素
    $currentItem = [
        'id' => $this->id,
        'title' => $this->title
    ];

    // 如果存在父级分类,递归获取父级数组并追加当前元素
    if ($this->parent) {
        return array_merge($this->parent->getParentsNamesArray(), [$currentItem]);
    }

    // 没有父级时,返回仅包含当前分类的数组
    return [$currentItem];
}

代码解释:

  1. 错误原因:你原来的写法return $this->parent->getParentsNamesArray()[][]=[...]是无效的PHP语法,无法实现数组的合并,只会返回当前分类的单个元素。
  2. 正确逻辑:
    • 先封装当前分类的id和title为单个数组元素
    • 如果存在父级,递归调用父级的getParentsNamesArray()获取完整的父级链数组,再用array_merge()把当前元素追加到数组末尾
    • 无父级时直接返回包含当前分类的数组

示例效果:

假设分类层级为 顶层分类(ID:1) → 父分类(ID:2) → 当前分类(ID:3),调用$currentCategory->getParentsNamesArray()会返回:

[
    ['id' => 1, 'title' => '顶层分类'],
    ['id' => 2, 'title' => '父分类'],
    ['id' => 3, 'title' => '当前分类'],
]

可选调整:

如果你需要从当前分类到顶层父级的顺序(比如当前→父→顶层),只需要调换array_merge的参数顺序:

return array_merge([$currentItem], $this->parent->getParentsNamesArray());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:43:10