Potrebbe essere necessario creare un metodo ORM separato per questo? Qualcosa come 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 nomi!). PS. Non ricordo come interrogare "WHERE IN", quindi uso le espressioni DB.
questo è come funziona per me, se qualcuno di voi ha un'alternativa migliore si sente libero di postarlo qui. – leonardys
Credo che questo sia il modo in cui dovrebbe essere fatto. Si noti inoltre che invece di 'array_merge()' è possibile utilizzare l'helper Array: '$ results = Arr :: merge ($ staffs, $ manager);'. Cordiali saluti. –