kohana-orm选择具有所有给定角色的用户


kohana orm select users with all given roles

我需要选择具有所有给定角色的用户。在Model_User中,我有:

 public function getUsers() {
   $users = $this
            ->join('roles_users')->on('roles_users.user_id', '=', 'user.id')
            ->where('role_id', '=', ORM::factory('Role', array('name' => 'login')))
            ->and_where('role_id', '=', ORM::factory('Role', array('name' => 'simple_user')));
    return $users;
}

但这是行不通的。当做

如果你要关注Ryan发布的链接,你可以这样修改脚本:

public function get users() {
    $login = ORM::factory('role', array('name' => 'login'))->users->find_all()->as_array();
    $simple_user = ORM::factory('role', array('name' => 'simple_user'))->users->find_all()->as_array();
    return array_intersect($login, $simple_user);
}

因此,您应该只有同时具有这两个角色的用户。

另一件小事是,您应该在函数名称中遵循kohana约定。

我建议用一种不同的方法来解决这个问题:

public function getUsers() {
    // Get IDs of all users having "login" role
    $active_users = ORM::factory('Role', array('name' => 'login'))->users->find_all()->as_array(null, 'id');
    // Select all users having roles "simple user" and "login"
    $users = ORM::factory('Role', array('name' => 'simple_user'))->users->where('id', 'IN', $active_users)->find_all();
    return $users;
}