如何在Laravel 5中将同一个表格建立一对多的关系?

时间:2016-09-27 10:16:23

标签: php laravel laravel-5 eloquent

我有一个名为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)时,它返回一个空数组。 请任何人帮忙。 提前谢谢。

1 个答案:

答案 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();