在 laravel 4 中使用五个模型的 Eloquent 映射表关系

Posted

技术标签:

【中文标题】在 laravel 4 中使用五个模型的 Eloquent 映射表关系【英文标题】:Eloquent mapping table relation using five models in laravel 4 【发布时间】:2013-04-20 04:45:24 【问题描述】:

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

        Admin    > Users > User Management
        Admin    > Books > Book Master
        Settings > Users > Password Reset
        Reports  > Books > Book Lists

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

有五个表:menu_modules、menu_sub_modules、module_submodule_mapping、menu_nodes 和 submodule_node_mapping。

'menu_module fields' - menu_module_id、module_name、created_at、updated_at

'menu_sub_modules' 字段 - menu_sub_module_id、sub_module_name、created_at、updated_at

'module_submodule_mapping' 字段 - sub_module_mapping_id、menu_module_id、menu_sub_module_id、created_at、updated_at

'menu_nodes' 字段 - menu_node_id、node_name、created_at、updated_at

'submodule_node_mapping' - node_mapping_id, menu_sub_module_id, menu_node_id, created_at, updated_at

首先我必须在 laravel 4 中使用 eloquent 关系来获得类似这样的查询结果:

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 中。

【问题讨论】:

【参考方案1】:

我相信,根据您想要做的事情,使用 Query Builder 的时间不会那么混乱,因为它具有在表上执行连接的方法。这将需要对表结构进行一些重建,但最终应该更容易理解。

菜单模块

    身份证 姓名 created_at updated_at

menu_sub_modules

    身份证 姓名 menu_id(这将是 menu_modules 的外键) created_at updated_at

菜单节点

    身份证 姓名 sub_id(这将是 menu_sub_modules 的外键) created_at updated_at

现在有了这些外键,我们可以使用查询构建器,而不必担心额外的数据透视表。

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

【讨论】:

以上是关于在 laravel 4 中使用五个模型的 Eloquent 映射表关系的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 4 中选择相关模型计数为 0 的模型?

在没有类依赖的自定义类/子系统中使用 Laravel 4 模型

如何在 laravel 4.2 中动态更改模型表?

Payum - Laravel 4 的包。如何使用 Eloquent 而不是 FilesystemStorage 创建模型数据?

laravel 4将IP地址保存到模型

PHP 7 和 Laravel 8 使用私有变量序列化模型