Pregunta

Estoy aprendiendo el marco, y ahora la construcción de una aplicación de usarlo.

Necesito llegar a todos los usuarios que tienen 'usuario' o la función 'personal', pero no pude encontrar sobre ello en la documentación.

Alguien puede ayudar? (Creo que es más un problema de ORM el módulo de autenticación)

¿Fue útil?

Solución

No se encontró una manera fácil de hacer esto utilizando el ORM, pero tengo una solución.
Este es mi código para cualquiera que pueda encontrar el mismo problema conmigo.

// 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);

Otros consejos

Puede ser que usted debe crear un método ORM separada por ello? Algo así como el código:

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

$ papeles es una matriz ROLE_ID (no nombres!). PD. No recuerdo cómo consulta 'EN DONDE', así que utilizo expresiones DB.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top