modulo auth Kohana 3, ottenendo gli utenti con 'personale' o il ruolo 'manager'
-
30-09-2019 - |
Domanda
Sto imparando il quadro, e ora la costruzione di un'applicazione di utilizzarlo.
Ho bisogno di ottenere tutti gli utenti che hanno 'utente' o il ruolo 'personale', ma non ho potuto trovare su di esso sulla documentazione.
Guida a nessuno? (Credo che sia più un problema di ORM il modulo auth)
Soluzione
non ho trovato un modo semplice per farlo usando l'ORM, ma ho una soluzione.
Questo è il mio codice per chiunque potrebbe incontrare lo stesso problema con 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);
Altri suggerimenti
Può essere è necessario creare un metodo di ORM separato per esso? Qualcosa di simile a questo codice:
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();
}
$ ruoli è un array ROLE_ID (non i nomi!). PS. Non mi ricordo come query 'DOVE IN', per cui uso espressioni DB.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow