Laravel - 雄辩。在同一个表/模型中自动引用另一行

时间:2017-05-02 10:28:35

标签: laravel laravel-5 laravel-eloquent

我有一个Group.php模型。 db表与列类似:idtitledescriptionparent

parent列引用了此表中另一个组的ID。因此,如果记录在父列中具有值,则它是另一个组的子项。如何以雄辩的方式进行并获得嵌套组的层次结构。

我想使用这个,所以当我在刀片中时我想为外部父组做foreach然后为每个孩子做foreach以查看是否有其他孩子然后做{ {1}}再次。

1 个答案:

答案 0 :(得分:0)

你应该在Group Model中创建子关系:

 function children(){
    return $this->hasMany(Group::class, 'id','parent');
 }

在控制器中你需要创建递归函数

function list_groups($groups)
{
  $data = [];

  foreach($groups as $group)
  {
    $data[] = [
      'id' = $group->id,
      'title' => $group->title,
        //ToDo addd Your Data Here
      'children' = list_groups($group->children),
    ];
  }

  return $data;
}

现在可以使用

 $root_groups = Group::with('children')->whereParent(0)->get(); //get All Root group
 $groups = list_groups($root_groups); // now get all childs

注意,代码未经过测试