我有一个名为menus的表。我想用它的子菜单检索菜单。但是只检索父菜单.Child菜单结果是一个空数组。 我的表结构是:id | parent_id |名称。 我的菜单模型一对多的关系是:
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’);
}
当我转储dump sub_menus dd($ sub_menus)时,它返回一个空数组。 请任何人帮忙。 提前谢谢。
答案 0 :(得分:0)
您为 $ menu 变量中存储的新创建的菜单对象提取 childMenus 关系,该变量没有任何相关的子菜单,您应该为数据库中已存在的父菜单获取chidlMenus。
使用子菜单加载父菜单的最简单方法是执行以下操作(请注意,无需创建新的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();