Как создать многоуровневое динамическое меню c, используя Laravel? - PullRequest
2 голосов
/ 23 марта 2020

Я хочу динамически создавать меню и подменю в laravel, и у меня есть 2 таблицы в laravel:

Что у меня есть:

имя таблицы: 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

Как получить данные правильно и отобразить их на экране?

Не могли бы вы, ребята, помочь мне, я много борюсь в этом.

Заранее спасибо

...