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]; }
代码解释:
- 错误原因:你原来的写法
return $this->parent->getParentsNamesArray()[][]=[...]是无效的PHP语法,无法实现数组的合并,只会返回当前分类的单个元素。 - 正确逻辑:
- 先封装当前分类的
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
相关产品推荐
相关产品推荐

