2012-07-24 9 views
5

Kohana 3.2 'अग्रिम' ORM मिलती

इस डाटाबेस ERD कि मैं आवेदन में इस्तेमाल करते हैं। मैं कोहाना 3.2 का उपयोग कर रहा हूँ। मैं जो हासिल करना चाहता हूं वह वर्तमान में लॉग इन उपयोगकर्ता के लिए मेनू उत्पन्न करना है। प्रत्येक उपयोगकर्ता के पास कई भूमिकाएं हो सकती हैं, इसलिए उस उपयोगकर्ता के आधार पर मॉड्यूल के साथ पॉप्युलेट मेनू प्राप्त करना चाहिए (जो मेनू और उपयोगकर्ता के संबंध में हैं)।

मैंने कई foreach loops के माध्यम से इसे हासिल किया है। क्या ओआरएम का उपयोग करके ऐसा करना संभव है?

* तालिका 'मॉड्यूल' मेनू आइटम का प्रतिनिधित्व करता है।

संपादित करें: यह मेरा वर्तमान कोड है।

 $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

पर्याप्त जानकारी नहीं है। आप किस तरह के जॉइन चाहते हैं? – biakaveron

+0

उपयोगकर्ता के लिए मेनू/एस उत्पन्न किया जाना चाहिए। प्रत्येक मेनू में मॉड्यूल होते हैं (लेकिन केवल वे लोग जो एक ही समय में उपयोगकर्ता भूमिका और भूमिका मेनू से संबंधित होते हैं)। – dzeno

+0

धन्यवाद। कृपया अपने "foreach loops" को दिखाएं जिन्हें आप ORM के साथ बदलना चाहते हैं – biakaveron

उत्तर

0

मुझे लगता है कि यह अच्छा समाधान होना चाहिए।

 $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); 
संबंधित मुद्दे