1

我使用 Laravel 8 在我的数据库中,我有一个包含以下数据的菜单表:

id  | id_parent | name         | route                 | routename            | term   | active
----------------------------------------------------------------------------------------
1   | NULL      | "Home"       | "/"                   | "home"               | "main" | 1
2   | NULL      | "Storage"    | "/storage"            | "storage"            | "main" | 1
3   | 2         | "Devices"    | "/storage/devices"    | "storage.devices"    | "main" | 1
4   | 2         | "New Device" | "/storage/new-device" | "storage.new-device" | "main" | 1

在我的菜单模型中,我有以下代码:

public function parent()
{
    return $this->belongsTo('App\Models\Menu', 'id_parent');
}

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

我的 Controller 中的函数如下所示:

static function getMenu($term)
{
    $id_userrole = Auth::user()->id_userrole;
    $route = \Request::route()->getName();
    $menu = Menu::select('name','route','routename')
    ->with('children')
    ->where([['term',$term], ['active',1],['id_parent',null]])
    ->whereHas('access', function($q) use ($id_userrole) {
        $q->where('id_userrole', $id_userrole)
        ->orWhere('id_userrole', 0);
    })
    ->get();
    dump($menu);

    foreach($menu as &$m) {
        $m->isActive = $route == $m->routename ? 1 : 0;
        
        foreach($m->children as &$m2) {
            $m2->isActive = $route == $m2->routename ? 1 : 0;
            $m->isActive = $m2->isActive;
        }
    }
    
    return ApiResource::collection($menu);
}

如果我想生孩子,数组是空的。这是我的输出:

{"data":[{"name":"Home","route":"\/","routename":"home","isActive":0,"children":[]},{"name":"Storage","route":"\/storage","routename":"storage","isActive":0,"children":[]}]}

我究竟做错了什么?

4

1 回答 1

0

children如果模型结果有id列,则该关系将起作用,您可以像这样测试:

Menu::with('children')->all();

顺便说一句,parent关系应该是:

public function parent()
{
    return $this->belongsTo('App\Models\Menu', 'id', 'id_parent');
}

如果你想得到孩子的孩子的孩子......

public function descendants()
{
    return $this->children()->with('descendants');
}
于 2020-11-14T10:31:20.313 回答