Козана 3 Authule Module, получение пользователей с ролью «сотрудника» или «менеджер»
-
30-09-2019 - |
Вопрос
Я изучаю структуру, и теперь создаете приложение, используя его.
Мне нужно получить все пользователи, которые имеют «пользователь» или «роль персонала», но я не смог найти об этом на документацию.
Помочь кому-нибудь? (Я думаю, что это больше проблема ORM Модуль авторизации)
Решение
Я не нашел простого способа сделать это, используя ORM, но у меня есть обходной путь.
Это мой код для тех, кто может столкнуться с той такой же проблемой со мной.
// One for each role
$staffs = ORM::factory('role', array('name' => 'staff'))->users->find_all()->as_array();
$managers = ORM::factory('role', array('name' => 'manager'))->users->find_all()->as_array();
// Merge the results
$results = array_merge($staffs, $managers);
Другие советы
Может быть, вы должны создать отдельный метод ORM для этого? Что-то вроде этого кода:
public function get_users(array $roles)
{
$users = DB::select(array($this->_has_many['roles']['foreign_key'], 'id'))
->distinct(TRUE)
->from($this->_has_many['roles']['through'])
->where($this->_has_many['roles']['far_key'], 'IN', DB::expr('('.implode(',', $roles).')'))
->execute($this->_db);
if (count($users) == 0)
{
// return empty list
return array();
}
// now we need only IDs from result
$ids = array();
foreach($users as $columns)
{
$ids[] = $columns['id'];
}
// load users by id
return $this->where($this->_primary_key, 'IN', DB::expr('('.implode(',', $ids).')'))->find_all();
}
$ Роли - это роль_Ид Array (не имена!). Придавать Я не помню, как запрашивать «Где в», поэтому я использую выражения БД.
Не связан с StackOverflow