我有以下功能,可以帮助我获取类别名称。
public function getParent($categoryId, $keepData) {
$parentCategory = Category::select('category_id', 'parent_id', 'title')
->where('category_id', $categoryId)->first();
if($parentCategory->parent_id > 0) {
$parent = Category::select('category_id','parent_id','title')
->where('category_id',$parentCategory->parent_id)
->first();
$keepData[$parent->category_id] = $parent->title;
$this->getParent($parent->category_id, $keepData);
} else {
//print_r($keepData);
return $keepData;
}
}
当我在函数内部print_r
时,它会打印一个数组。
array:2 [▼
3 => "Stock Boxes"
1 => "Boxes"
]
但是从其他函数调用此函数,
$keepData = array();
$breadcrumb = $this->getParent($categoryId, $keepData);
print_r($breadcrumb);
然后返回null
。
我缺少的是什么步骤。任何帮助都会很棒。
答案 0 :(得分:0)
显然是这种情况
if ($parentCategory->parent_id > 0) {
// ...
}
评估为true
,并且在此块中您没有返回任何内容,这就是方法调用有效返回null
的原因。
将方法调整为
public function getParent($categoryId, array $keepData = [])
{
$parentCategory = Category::select('category_id', 'parent_id', 'title')->where('category_id', $categoryId)->first();
if ($parentCategory->parent_id > 0) {
$parent = Category::select('category_id','parent_id','title')->where('category_id',$parentCategory->parent_id)->first();
$keepData[$parent->category_id] = $parent->title;
return $this->getParent(
$parent->category_id,
$keepData
);
}
return $keepData;
}
并像这样调用(注意$keepData
如何变成可选参数并默认为空数组):
$breadcrumb = $this->getParent($categoryId);