2012-10-18 39 views
0

我有Model_User延伸ORM,與角色的一個$_has_many關係:Kohana的3 ORM - 連接和靜態方法的has_many關係

protected $_has_many = array(
    'roles' => array('model'=>'role','through'=>'users_roles'), 
); 

我有一個靜態函數返回所有活躍用戶:

public static function get_all_active_users() 
{ 
    return self::factory('user')->where('status', '=', 'active')->find_all(); 
} 

我想更新函數,只返回基於以下sql的特定角色的用戶:

SELECT `users`.* FROM `users` 
INNER JOIN `users_roles` ON `users_roles`.`user_id` = `users`.`id` 
INNER JOIN `roles` ON `roles`.`id` = `users_roles`.`role_id` AND `roles`.`identifier` = 'admin' 
WHERE `users`.`status` = 'active' 

有沒有辦法過濾get_all_active_users方法中的結果,還是應該創建一個新方法並手動加入?

回答

1

這是爲我工作:

return self::factory('user') 
       ->join('users_roles', 'INNER')->on('users_roles.user_id', '=', 'user.id') 
       ->join('roles', 'INNER')->on('roles.id', '=', 'users_roles.role_id') 
       ->where(roles.identifier', '=', 'admin') 
       ->where('status', '=', 'active') 
       ->find_all(); 

興趣知道任何替代品。

0

一個更優雅的方式定義角色模型有很多用戶是這樣的:

protected $_has_many = array(
    'users' => array('model'=>'user','through'=>'users_roles'), 
); 

然後通過角色本身這樣獲取的用戶:

return self::factory('role') 
      ->where('identifier', '=', 'admin') 
      ->users-> 
      ->where('status', '=', 'active') 
      ->find_all();