Я изучаю структуру и теперь создаю приложение, использующее его.
Мне нужно, чтобы все пользователи имели роль «пользователь» или «штат», но я не мог найти об этом в документации.
Помогите кому-нибудь? (Я думаю, что это больше проблема ORM в модуле auth)
Я не нашел простой способ сделать это с помощью 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(); }
$ role – это массив role_id (а не имена!). PS. Я не помню, как запросить «WHERE IN», поэтому я использую выражения DB.