Model 在laravel 4中使用五种模型的雄辩映射表关系

Model 在laravel 4中使用五种模型的雄辩映射表关系,model,laravel,laravel-4,relationship,eloquent,Model,Laravel,Laravel 4,Relationship,Eloquent,我有一个从数据库加载菜单的项目。该体系结构首先是顶部水平菜单(管理、设置、报告)的模块,然后是左侧栏垂直菜单标题(用户、书籍)的子模块,最后一个是节点,单击子菜单(用户管理、密码重置、书籍主控、书籍列表)时展开 这样,节点将只出现一次,模块和子模块将重复 共有五个表:菜单模块、菜单子模块、模块子模块映射、菜单节点和子模块节点映射 “菜单模块字段”-菜单模块id、模块名称、创建时间、更新时间 “菜单子模块”字段-菜单子模块id、子模块名称、创建时间、更新时间 “模块子模块映射”字段-子模块映射标识

我有一个从数据库加载菜单的项目。该体系结构首先是顶部水平菜单(管理、设置、报告)的模块,然后是左侧栏垂直菜单标题(用户、书籍)的子模块,最后一个是节点,单击子菜单(用户管理、密码重置、书籍主控、书籍列表)时展开

这样,节点将只出现一次,模块和子模块将重复

共有五个表:菜单模块、菜单子模块、模块子模块映射、菜单节点和子模块节点映射

“菜单模块字段”-菜单模块id、模块名称、创建时间、更新时间

“菜单子模块”字段-菜单子模块id、子模块名称、创建时间、更新时间

“模块子模块映射”字段-子模块映射标识、菜单子模块标识、菜单子模块标识、创建子模块标识、更新子模块标识

“菜单节点”字段-菜单节点id、节点名称、创建位置、更新位置

“子模块\节点\映射”-节点\映射\ id,菜单\子模块\ id,菜单\节点\ id,创建\在,更新\在

首先,我必须使用laravel 4中的雄辩关系获得类似此查询的结果:

SELECT A.module_name,B.sub_module_name FROM menu_module A,menu_sub_modules B,module_submodule_mapping C WHERE A.menu_module_id = C.menu_module_id AND B.menu_sub_module_id = C.menu_sub_module_id
然后,第二个结果类似于此查询:

SELECT A.node_name FROM menu_nodes A,submodule_node_mapping B WHERE A.menu_node_id = B.menu_node_id AND C.menu_sub_module_id = '1' 

谁能解释一下模型的结构和方法,以及如何在视图中得到结果。请注意,我使用的是我自己的id字段,如menu_node_id,项目位于laravel 4中。

我相信,通过您要做的事情,使用查询生成器可以减少混乱,因为它有对表执行联接的方法。这需要对表结构进行一点重建,但最终应该更容易理解

菜单单元

  • 身份证
  • 名字
  • 创建于
  • 更新地址
  • 菜单子模块

  • 身份证
  • 名字
  • 菜单id(这将是菜单模块的外键)
  • 创建于
  • 更新地址
  • 菜单节点

  • 身份证
  • 名字
  • 子菜单id(这将是菜单子菜单模块的外键)
  • 创建于
  • 更新地址
  • 现在有了这些外键,我们就可以使用查询生成器,而不必担心额外的数据透视表

    DB::table('menu_modules')
    ->JOIN('menu_sub_modules', 'menu_sub_modules.menu_id', '=', 'menu_modules.id')
    ->JOIN('menu_nodes', 'menu_nodes.sub_id', '=', 'menu_sub_modules.id')
    ->get();
    
    DB::table('menu_modules')
    ->JOIN('menu_sub_modules', 'menu_sub_modules.menu_id', '=', 'menu_modules.id')
    ->JOIN('menu_nodes', 'menu_nodes.sub_id', '=', 'menu_sub_modules.id')
    ->get();