laravel 5.1 中的菜单和 child 菜单

Menu and child menu in laravel 5.1

所以我的数据库中有一个 table,带有 id、id_parent、标题等等。 我需要创建一个包含子列表的列表。我需要某种递归函数,但不知道如何在 laravel..

中实现

我试过了

class Goals extends Model {
  protected $table = 'goals';

  public function subgoals() {
    return $this->hasMany(SubGoals::class, 'id_category');
  }
}

class SubGoals extends Model {
  protected $table = 'goals';

  public function goals() {
    return $this->belongsTo(Goals::class, 'id_category');
  }
}

控制器:

$treeView = Goals::with(['SubGoals'])->get();

并查看:

@foreach($treeView as $category)
  <li>
    <a href="#"> {{ $category->title }} </a>
      <ul>
         @foreach($category->subgoals as $subcategory)
           <li><a href="#">{{ $subcategory->title }}</a></li>
         @endforeach
       </ul>
 </li>
@endforeach

没有得到正确的结果.. 也许有人有一个片段..

您不需要创建 2 个 类,只需要一个像您的示例目标。

class Goal extends Model {
  protected $table = 'goals';

  public function subgoals() {
    return $this->hasMany(Goal::class, 'parent_id', 'id');
  }
}

然后在控制器中你需要像这样"Query all parent Goals":

$parent_goals = Goal::whereNull('parent_id')->get();

最后在视图中:

@foreach($parent_goals as $goal)
  <li>
    <a href="#"> {{ $goal->title }} </a>
      <ul>
         @foreach($goal->subgoals as $subgoal)
           <li><a href="#">{{ $subgoal->title }}</a></li>
         @endforeach
       </ul>
 </li>
@endforeach

就是这样。希望对你有帮助。