Kohana中的嵌套关​​系3 ORM

问题描述:

假设我在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

我会找到一个组中的所有用户通过呼唤

$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

您可以添加后使用ORM::factory('category', $id)->users->find_all()有很多通过关系:

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

找到所有的组类别

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