lundi 4 janvier 2016

Laravel 5 eloquent recursive programming

I have then next 2 tables

/* systems */
id    sys_name
 1    Debtors
 2    Creditors
 3    Cashbook

/* menus */
id    system_id    parent_id   menu_desc
1         1            0       Maintenance
2         1            1       Maintain Debtors
3         1            2       Debtor Addresses
4         1            1       Maintain Clerks
5         3            0       Bank Reconciliation

I have 2 Eloquent models

/* System */
public function menus(){ 
   return this->hasMany(Menu::class,'system_id','id')->where('menus.parent_id','=',0);
}
public function submenus(){ 
   return this->hasMany(Menu::class,'system_id','id')->where('menus.parent_id','=','menus.id');
}

/* Menu */
public function system(){
   return $this->belongsTo(System::class,'system_id','id');
}
public function parent(){
   return $this->hasOne(Menu::class,'id','parent_id');
}
public function children(){ 
   return $this->hasMany(Menu::class,'parent_id','id');
}

I want to achieve the following in blade.php:

@foreach($systems as $system)
   ....... 
   @foreach($menus as $menu)
      .......
      @foreach($submenus as $submenu)
          ........
       @endforeach
    @endforeach
 @endforeach

with the following output: (I am using bootstrap for indentation)

Debtors
   Maintenance
      Maintain Debtors
         Debtor Addresses
      Maintain Clerks
Creditors
Cashbook
   Bank Reconciliation

MenuController

$systems = System::with('menus','submenus')->get();

but it doesn't work. There are no submenu records. I think the problem is 'menus.id' in function submenus() but dont know how to solve it.

Please help as I have battled more than 3 days to build a menu treeview.

Thanking you in advance



from Newest questions tagged laravel-5 - Stack Overflow http://ift.tt/1mxJIhN
via IFTTT

Aucun commentaire:

Enregistrer un commentaire