2014-09-05 1 views
0

Мне нужно выбрать пользователей, имеющих все заданные роли. В Model_User я есть:kohana orm выберите пользователей со всеми заданными ролями

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; 
} 

Но это не работает. С уважением.

+0

Смотрите так: http://stackoverflow.com/questions/3552875/kohana-3-auth-module-getting-users-with- Персонал-менеджер-роль – Ryan

+0

Спасибо, но я знаю этот вопрос. Мне нужно выбрать пользователей с обеих ролей вместе ('и', а не 'или'). С уважением – masteryoda

ответ

0

Если вы будете следовать по ссылке, что сообщения 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 в своем имени функции.

0

Я предлагаю другой подход к этой проблеме:

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; 
} 
Смежные вопросы