2016-10-29 6 views
1

モデル:laravel 5のメニュー複数のレベル?

 
class Menu extends Model 
{ 
    protected $table = 'menus'; 

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

} 

コントローラー:

 
class MenuController extends Controller 
{ 

    public function index() 
    { 
     $menus = Menu::where('parent_id', 0)->get(); 
     return view('admin.menus.index',compact('menus')); 
    } 
} 

ビュー:

<ul> 
    @foreach($menus as $menu) 
    <li>{{ $menu->title }} 
    @if($menu->sub_menu->count() > 0) 
     <ul> 
     @foreach($menu->sub_menu as $sub) 
      <li{{ $sub->title }}</li> 
     @endforeach 
     </ul> 
    @endif 
    </li> 
    @endforeach 
</ul> 

テーブルの構造:

 
---------------------------------------------------------------------- 
     id   |   title   |  parent_id 
---------------------------------------------------------------------- 
     1   |   Home    |   0 
---------------------------------------------------------------------- 
     2   |  Product1   |   0 
---------------------------------------------------------------------- 
     3   |  Product1.1   |   2 
---------------------------------------------------------------------- 
     4   |  Product1.1.1  |   3 
---------------------------------------------------------------------- 
     5   |  Product1.1.2  |   3 
---------------------------------------------------------------------- 

これは2レベルしか表示されませんが、複数のレベルが必要な場合は、お手伝いください!

+0

ここで問題は何ですか? –

+0

@ AmitGupta.opは、メニューが複数のレベルであれば、ループ内のメニューを表示する必要がありますが、foreachループを使用している場合、2つのステップmenu.iで終了します。ループ中に使用する必要があることを願っています。 – iCoders

+0

@AmitGupta、 2レベルのみですが、複数レベルが必要です。助けてください! –

答えて

2

あなたはとして再帰を使用して、それを試すことができます:それはあなたのビューは、そうでない場合は上記のみコンテンツを持っているとき、あなたは部分的に新しいを作成し、再帰的に呼び出している動作します

<ul> 
    @foreach($menus as $menu) 
     <li> 
      {{ $menu->title }} 
      @if($menu->sub_menu->count()) 
       {!! view('admin.menus.index', ['menus' => $menu->sub_menu]) !!} 
      @endif 
    </li> 
    @endforeach 
</ul> 

再帰を使用して無限ループで終了することがありますので注意してください。

+0

私はあなたの助けに感謝します。 –

+0

いいえ、複数のレベルでは動作しませんが、1レベルで正常に動作します。どうもありがとうございましたが、モデルで再帰関数を作成することで既に解決しました。ありがとう! –

+0

この[repo](https://github.com/atayahmet/laravel-nestable)も確認できます。それがあなたを助けるように見えます。 –

関連する問題