2017-10-12 35 views
1

我已經創建了嵌套的treeview類別和子類別,但似乎它正在渲染類別兩次。Treeview菜單在Laravel中渲染兩個類別

這是發生了什麼,我在頁面上看到。

Main category 1 
    - Sub -category 1.1 
    - Sub -category 1.2 
Main category 2 
    - Sub -category 2.1 
    - Sub -category 2.2 
Sub -category 1.1 
Sub -category 1.2 
Sub -category 2.1 
Sub -category 2.2 

這裏發生的一件事是,首先是渲染正確的樹視圖,但然後在渲染子類別作爲主要類別。

將類別和子類別保存在一個表中,其中主要類別爲parent_id 0,如果是子類別,則是主類別的ID。這是我的模型

public function parent() 
{ 
    return $this->belongsTo('App\Category'); 
} 

public function children() 
{ 
    return $this->hasMany('App\Category', 'parent_id'); 
} 

控制器

public function index() 
{ 
    $allCategories = Category::with(['children'])->get();  
    return view('categories', compact('allCategories')); 
} 

和刀片

@foreach($allCategories as $category) 
    <li class="treeview"> 
    <a href="{{ $category->id }}">{{ $category->title }}</a> 
    <ul class="treeview-menu"> 
     @foreach($category->children as $subcategory) 
     <li class=""><a href="{{$subcategory->id}}">{{$subcategory->title}}</a></li> 
     @endforeach 
    </ul> 
    </li> 
@endforeach 

回答

1

嘗試這樣的。

型號

public function parent() 
{ 
    return $this->belongsTo('App\Category', 'id', 'parent_id'); // I believe you can use also hasOne(). 
} 

public function children() 
{ 
    return $this->hasMany('App\Category', 'parent_id', 'id'); 
} 
public static function tree() { 

    return static::where('parent_id', '=', NULL)->get(); // or based on you question 0? 

} 

你的控制器

public function index() 
{ 
    $allCategories = Category::tree();  
    return view('categories', compact('allCategories')); 
} 

而且刀片觀點

@foreach($allCategories as $item) 
<li class="treeview"> 
    <a href="{{ $item->id }}"><i class="fa fa-link"></i> <span>{{ $item->title }}</span> <i class="fa fa-angle-left pull-right"></i></a> 
     <ul class="treeview-menu"> 
      @foreach($item['children'] as $child) 
      <li><a href="{{ $child->id }}">{{ $child->title }}</a></li> 
      @endforeach 
     </ul> 
</li> 
@endforeach 
+0

感謝。它運作良好。 – Peter