2012-04-20 39 views
2

假設我在Kohana中有三個ORM模型。Kohana中的嵌套關​​系3 ORM

class Model_Category extends ORM 
{ 
    protected $_has_many = array(
     'groups'  => array(
      'model'  => 'group', 
      'foreign_key' => 'category_id' 
     ) 
    ); 
} 

class Model_Group extends ORM 
{ 
    protected $_has_many = array(
     'users'  => array(
      'model'  => 'user', 
      'foreign_key' => 'group_id' 
     ) 
    ); 
} 

class Model_User extends ORM 
{ 

} 

我會得到一個類別中的所有組通過調用ORM::factory('category')->find($id)->groups。我會通過致電ORM::factory('group')->find($id)->users找到一個組中的所有用戶。我如何找到一個類別中的所有用戶?

+0

通過尋找所有類別組,然後發現在這些組中的所有用戶。 – hakre 2012-04-20 19:51:32

回答

1

我會找到一個組中的所有用戶通過呼喚

$groups = ORM::factory('category', array('id', $id))->groups->find_all(); 

我將如何找到一個類別中的所有用戶?

ORM::factory('group', array('id', $id))->users->find_all(); 
+1

如果'id'是主鍵,則足以調用'ORM :: factory('category',$ id)' – matino 2012-04-21 09:22:15

1

您可以添加後使用ORM::factory('category', $id)->users->find_all()有很多通過關係:

class Model_Category extends ORM 
{ 
    protected $_has_many = array(
     'users' => array('through' => 'groups'), 
     // ... 
    ); 
} 
1

找到所有的組類別

$groups = ORM::factory('category', $id)->groups->find_all(); 

遍歷組並得到她的用戶

foreach ($groups as $group) 
{ 
    $users = $group->users->find_all() 
} 

或建立一個連接,這樣

$users = DB::select('users.*')->from('categories') 
    ->join('groups', 'LEFT') 
    ->on('categories.id', '=', 'groups.category_id') 
    ->join('users', 'LEFT') 
    ->on('groups.id', '=', 'users.group_id') 
    ->where('categories.id', '=', $id) 
    ->execute();