2016-09-09 14 views
0

表にカテゴリのネストされたリストのブレッドクラムを作成Laravel 5.2

 
+---------+-----------+-----------+ 
|  id | name | parent_id | 
+---------+-----------+-----------+ 
|  1 | Supports |  0 |  
|  2 | Mobile |  0 |  
|  3 | Outdoor |  1 |  
|  4 | Samsung |  2 | 
|  5 | Cricket |  3 | 
|  6 | Team A |  5 |  
+---------+-----------+-----------+ 

カテゴリーモデル

class Categories extends Model { 

    public $table = "categories"; 
    protected $fillable = ['name', 'parent_id', 'status']; 

    public function parentCat() { 
     return $this->belongsTo(Categories::class, 'parent_id'); 
    } 

    public function childrenCat() { 
     return $this->hasMany(Categories::class, 'parent_id'); 
    } 

} 

コントローラメソッド

Categories::where('parent_id', $parent_id)->orderBy('name', 'ASC')->get(); 

質問1

私のようなクリケットのサブカテゴリ見ていた場合、私は、カテゴリとサブカテゴリでパンくずを表示する:

ホーム - >サポート - >アウトドア - >クリケット

質問2

どのようにしメインカテゴリを削除している間にすべてのサブカテゴリを削除します。例私はアウトドアを削除し、クリケットとチームAを削除する必要があります

+0

「チームA」はこの画像にどこに収まるのですか?これは、どこから来るのかを正確には明確にしていない例として、最後の文でのみ発生します。 – tripleee

+0

@tripleee申し訳ありません更新された – Nadeem0035

答えて

1

まず最初に、Nested Set modelにあなたのカテゴリの構造を変更すると思います。入れ子になったカテゴリ(およびその他の構造)を処理する方が優れていて、より洗練されています。ご例えば

https://github.com/etrepat/baum

だけでなく、特に最適な解決策がある:ここでは素敵なLaravelのパッケージです。あなたは部分ビュー(例:breadcrumb.blade.phpを)必要があります

$category = Categories::where('parent_id', $parent_id) 
       ->orderBy('name', 'ASC') 
       ->first(); 
return view({your view here}, compact('category')); 

セクションで:あなたは葉のカテゴリ照会willlとき

<ul> 
@section('breadcrumb') 
@show 
</ul> 

ザ・メインのアクションでは、あなたがそのようsomethinkを行うことができ争います。

@section('breadcrumb') 
    <li>{{$category->name}}</li> 
@stop 
@while($parent = $category->parent) 
    @section('breadcrumb') 
     @parent 
     <li>{{$parent->name}}</li> 
    @stop 
@endwhile 

ATTENTION

しかし、私が最初に言ったように、これは非常に最適ではない解決策です。なぜなら、各親に対してクエリを呼び出さなければならないからです。ネストされたレベルがあまりないならば、それだけです。