我有一个名为菜单的表。我想检索菜单及其子菜单。但是只有父菜单被检索。子菜单结果为空数组。我的表结构是:id | parent_id | name。我的菜单模型一对多关系是:
public function childMenus() {
return $this->hasMany( ‘App'Menu’, ’parent_id’);
}
public function parentMenus() {
return $this->belongsTo(‘App'Menu’, ‘parent_id’);
}
My controller Method:
public function index()
{
$menu = new Menu;
$parent_menus = $menu->where('parent_id', NULL)->get();
$sub_menus = $menu->childMenus()->get();
return View('admin',compact('$parent_menus’, ‘sub_menus’);
}
当我潜水转储sub_menus dd($sub_menus)时,它返回一个空数组。请任何人帮忙。
您正在为新创建的Menu对象获取childMenus关系,该对象存储在$ Menu变量中,没有任何相关的子菜单,而您应该为已经存在于数据库中的父菜单获取childlmenus
用子菜单加载父菜单的最简单方法是执行以下操作(注意,不需要创建新的Menu对象):
$parent_menus = Menu::with('childMenus')->where('parent_id', NULL)->get();
$parent_menus现在将存储所有父菜单的集合,并且每个父菜单都有其子菜单存储在childMenus变量中。您可以使用以下命令迭代父菜单和子菜单:
foreach ($parent_menus as $parent) {
foreach ($parent->childMenus as $child) {
//do whatever you need with the child menu
}
}
如果你想要的只是所有子菜单的集合,不管他们有什么父菜单,只要:
$child_menus = Menu::whereNotNull('parent_id')->get();