Kohana 3 module auth, obtenir les utilisateurs avec « personnel » ou « gestionnaire » rôle
-
30-09-2019 - |
Question
J'apprends le cadre, et maintenant la construction d'une application qui l'utilise.
J'ai besoin de tous les utilisateurs qui ont un rôle « utilisateur » ou « personnel », mais je ne pouvais pas trouver à ce sujet sur la documentation.
quiconque aide? (Je pense qu'il est plus un problème de ORM le module auth)
La solution
Je ne trouve pas un moyen facile de le faire en utilisant l'ORM, mais j'ai une solution de contournement.
Ceci est mon code pour tous ceux qui pourraient rencontrer avec moi le même problème.
// 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);
Autres conseils
Peut être vous devez créer une méthode ORM séparée pour elle? Quelque chose comme ce code:
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();
}
$ rôles est un tableau role_id (pas de noms!). PS. Je ne me souviens pas comment la requête 'WHERE IN', donc j'utilise des expressions DB.