如何在Laravel控制器中获取当前类别的父类别?

时间:2020-07-10 19:11:03

标签: laravel laravel-7

有一个名为Categories(id,parent_id,name)的表。

目的是直接从控制器打印出这样的内容:

当前路径为: 电子产品>计算机>外围设备>视频卡(我们在这里)

视频卡parent_id指向外围设备,而外围设备则指向计算机,依此类推,直到parent_id=0到主要类别为止,迭代停止。

我正在以这种方式获取当前路径:

public function listCategories(Request $request)
    {
        $catID = $request->id;
        $currentCat = \App\Categories::find($catID);
      
        // Current path to be shown here
        echo '<h5>Current path: '.$currentCat->name.'</h5>';
    }

我相信我需要在这里进行一些迭代,以便以后可以使用foreach打印所有父类别。

更新:解决方案在这里: Laravel Get ancestors (URL)

1 个答案:

答案 0 :(得分:0)

您应该创建一个可以完成任务的递归函数!

首先在您的类别模型中声明一个hasParent函数,以确定实例是否具有父级的天气

Category.php

public function getHasParentAttribute(){
 
   return $this->parent_id !=0 ;
}

然后声明一个函数,该函数将为您提供祖先并为您设置路径格式

function  ParentNode($path,child){
If(child->hasParent){
        $path = child->Parent->name .">" . $path; 
        ParentNode($path,child->Parent);    
         }
        return $path;
     }

然后,在您的控制器中,您只需要调用该函数并为其提供初始路径和您想要检索其祖先的子类别

Controller.php

$child = Category::findOrFail($id);
$path = $child->name;
ParentNode($path,$child);

它将访问每个祖先,直到发现没有其他父代并返回最终路径

PS:Category模型中必须有一个函数,该函数返回模型的Parent实例

相关问题