首页 > 解决方案 > 如何使用 Laravel 创建多级动态菜单?

问题描述

我想在 laravel 中动态创建菜单和子菜单,我在 laravel 中有 2 个表,它们是:

我有的:

表名:modules

module_id  module_name      link    order
1          menu1            xxxx    1  
2          menu2            xxxx    2
3          menu3            xxxx    3

表名:menus

menu_id  module_id  parent_id  menu_name      link       order   
1        1          0          submenu1       xxxx       1  
2        2          0          submenu1       xxxx       1
3        2          2          submenu2       xxxx       2
4        2          2          submenu3       xxxx       3 
5        2          4          child1         xxxx       1
6        2          4          child2         xxxx       2
7        2          5          subchild1      xxxx       1

所以可能有N级子菜单。

我做了什么:

我创建模型之间的关系,例如:

class Modules extends Model
{
    protected $table = 'modules';
    protected $primaryKey = 'module_id';    
    protected $fillable = ['*'];    

    public function menuModels()
    {
        return $this->hasMany('App\Models\Menu', 'module_id');
    } 
}


class Menus extends Model
{    
    protected $table = 'menus';
    protected $primaryKey = 'menu_id';

    protected $fillable = ['*'];

    public function menuModels()
    {
        return $this->belongsTo('App\Models\Modules', 'menus', 'module_id');
    }
}

然后我获取如下数据:

$menuDatas = ModulesName::with('menuModels')->get()->toArray();

我得到了数据,但我面临的问题是子菜单应该进入 N 级菜单。

输出应该是这样的:

-menu1
    -submenu1
-menu2 
    -submenu1
    -submenu2
    -submenu3
        -child1
            -subchild1
        -child2
-menu3

如何以正确的方式获取数据并显示在视图中。

你们能帮帮我吗,我在这方面很挣扎。

提前致谢

标签: phpmysqllaravel-5

解决方案


推荐阅读