2012-04-20 2 views
2

Предположим, у меня есть три модели ORM в Кохане.Вложенные отношения в Кохане 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

ответ

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

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