¿Debería crear un método ORM diferente para ello? Algo como este 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();
}
$ roles es una matriz role_id (¡no los nombres!). PS. No recuerdo cómo consultar 'WHERE IN', así que uso expresiones DB.
así es como me funciona, si alguno de ustedes tiene una alternativa mejor, no dude en publicarla aquí. – leonardys
Creo que esta es la forma en que debería hacerse. También tenga en cuenta que en lugar de 'array_merge()' puede usar el ayudante Array: '$ results = Arr :: merge ($ staffs, $ managers);'. Saludos cordiales. –