2016-09-27 119 views
0

我有一个名为menus.I的表,我想要检索其子菜单的菜单。但只有父菜单正在检索.Child菜单结果是一个空的数组。 我的表结构是:id | parent_id |名称。 我的菜单模式一对多的关系是:如何与Laravel 5中的同一张桌子建立一对多的关系?

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)它返回一个空数组。 请任何人帮忙。 在此先感谢。

回答

0

你取存储在$菜单变量新建菜单对象,没有任何相关的子菜单childMenus关系,而你应该已经在存在父菜单获取chidlMenus您数据库。

加载父菜单与他们的孩子的菜单最简单的方法是做如下(注意,没有必要建立一个新的菜单对象):

$parent_menus = Menu::with('childMenus')->where('parent_id', NULL)->get(); 

$ parent_menus现将店collecton所有父母菜单和他们每个人都将其子菜单存储在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(); 
+0

谢谢您的回答。实际上,我的数据库有其子菜单的父菜单。当我dd($ parent_menus);它会返回结果,但是当我为子菜单执行相同操作时,它会给出空的结果。 –

+0

这是因为您错误地加载了子菜单。你需要像上面例子那样通过父菜单对象来访问它们,或者如果你只想在一个变量中使用所有子菜单,请参阅更新回答 –

+0

感谢您的帮助。实际上,我并没有通过父对象检索子菜单。现在工作。再次感谢 –

相关问题