Php 科哈纳3.2';预付款';ORM连接

Php 科哈纳3.2';预付款';ORM连接,php,orm,kohana,kohana-3,Php,Orm,Kohana,Kohana 3,这是我在应用程序中使用的数据库ERD。我用的是Kohana3.2。我想要实现的是为当前登录的用户生成菜单。每个用户可以有许多角色,因此基于这些角色,用户应该使用模块(与菜单和用户相关)填充菜单 我已经通过几个foreach循环实现了这一点。使用ORM可以做到这一点吗 *表“模块”表示菜单项 编辑:这是我的当前代码 $conf_modules = Kohana::$config->load('modules'); $user_roles = $user->

这是我在应用程序中使用的数据库ERD。我用的是Kohana3.2。我想要实现的是为当前登录的用户生成菜单。每个用户可以有许多角色,因此基于这些角色,用户应该使用模块(与菜单和用户相关)填充菜单

我已经通过几个foreach循环实现了这一点。使用ORM可以做到这一点吗

*表“模块”表示菜单项

编辑:这是我的当前代码

        $conf_modules = Kohana::$config->load('modules');
        $user_roles = $user->roles->find_all();

        $result     = array();
        $array  = array();

        foreach($user_roles as $user_role)
        {
            $menus   = $user_role->menus->find_all();
            $modules = $user_role->modules->find_all();
        }


        foreach($menus as $menu)
        {
            $m = $menu->modules->find_all();

            $result[]['name'] = $menu->name;

            foreach ($m as $a) 
            {
                foreach ($modules as $module) 
                {
                    if($a->name == $module->name)
                    {
                        foreach ($conf_modules as $key => $value) 
                        {
                            if($module->name == $key)
                            {
                                $array = array(
                                    'module_name' => $module->name,
                                    'text'        => $module->display_desc,
                                    'url'         => $value['url'],
                                );
                            }

                        }

                    }

                }
                array_push($result, $array);
            }

        }

我认为这应该是一个很好的解决方案

        $user = Auth::instance()->get_user();

        $user_roles = $user->roles->find_all();

        $conf_modules = Kohana::$config->load('modules');

        $role_modules = ORM::factory('module')
            ->join('roles_modules')
            ->on('roles_modules.module_id','=','module.id')
            ->where('role_id','IN',$user_roles->as_array(NULL,'id'))
            ->find_all();


        $role_menus = ORM::factory('menu')
            ->join('roles_menus')
            ->on('roles_menus.menu_id','=','menu.id')
            ->where('role_id','IN',$user_roles->as_array(NULL,'id'))
            ->find_all();

        $result = array();

        foreach ($role_menus as $role_menu) 
        {
            $menu_modules = $role_menu->modules->find_all();

            if ( ! isset($result[$role_menu->name]))
                $result[$role_menu->name] = array('name' => $role_menu->name);

            foreach ($menu_modules as $menu_module) 
            {
                foreach ($role_modules as $role_module) 
                {
                    if($menu_module->name == $role_module->name)
                    {
                        foreach ($conf_modules as $key => $value) 
                        {
                            if ($key == $role_module->name)
                            {
                                $result[$role_menu->name]['modules'][]['data'] = array('name' => $role_module->display_desc, 'url' => $value['url']);
                            }

                        }

                    }
                }   
            }   
        }

        return array_values($result);

没有足够的信息。您想要什么类型的联接?应为用户生成菜单。每个菜单都包含模块(但只包含同时属于用户角色和角色菜单的模块)。谢谢显示您要用ORM联接替换的“foreach循环”