Kohana 3 ORM 中的嵌套关系


Nested relationships in Kohana 3 ORM

假设我在Kohana中有三个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 来找到组中的所有用户。如何找到类别中的所有用户?

我会通过调用找到组中的所有用户

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

如何找到类别中的所有用户?

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

添加 a 有很多通过关系后,您将能够使用 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();