2012-07-24 20 views
5

Kohana 3.2 'avans' ORM

katılır Bu benim uygulamada kullanmak Veritabanı ERD olduğunu. Kohana 3.2 kullanıyorum. Başlamak istediğim, şu anda oturum açmış olan kullanıcı için menü oluşturmaktır. Her kullanıcının birçok rolü olabilir, bu nedenle bu kullanıcının modülleri (menü ve kullanıcı ile ilişkili olan) menü ile alması gerekir.

Bunu birkaç foreach döngüsünden geçiriyorum. ORM kullanarak bunu yapmak mümkün mü?

* Tablo 'Modüller' menü öğelerini temsil eder.

Düzenleme: Bu geçerli kodum.

 $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); 
      } 

     } 
+0

Yeterli bilgi yok. Ne tür birleşmeler var? – biakaveron

+0

Kullanıcı için menü oluşturulmalıdır. Her menü modülleri içerir (ancak yalnızca kullanıcı rolüne ve rol menüsüne ait olanlar aynı anda). Teşekkürler – dzeno

+0

Lütfen ORM ile değiştirmek istediğiniz "foreach döngülerinizi" gösteriniz – biakaveron

cevap

0

Bunun iyi bir çözüm olması gerektiğini düşünüyorum.

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