Kohana 3 ORM中的嵌套关​​系

时间:2012-04-20 19:09:16

标签: php orm kohana kohana-3 relationships

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

3 个答案:

答案 0 :(得分:1)

我会通过callin

找到一组中的所有用户
 $groups = ORM::factory('category', array('id', $id))->groups->find_all();

如何查找某个类别中的所有用户?

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

答案 1 :(得分:1)

在添加了多个关系后,您将可以使用ORM::factory('category', $id)->users->find_all()

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

答案 2 :(得分: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();