2012-04-20 18 views
2

Kohanaに3つの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

答えて

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(); 
関連する問題