Peut-être devriez-vous créer une méthode ORM distincte pour cela? 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();
}
$ roles est un tableau role_id (pas les noms!). PS. Je ne me souviens pas comment interroger 'WHERE IN', donc j'utilise des expressions DB.
Voici comment cela fonctionne pour moi, si l'un de vous a une meilleure alternative, n'hésitez pas à le poster ici. – leonardys
Je crois que c'est comme ça que ça doit être fait. Notez aussi qu'à la place de 'array_merge()' vous pouvez utiliser l'assistant Array: '$ results = Arr :: merge ($ staffs, $ managers);'. Sincères amitiés. –