Может быть, вы должны создать для него отдельный метод ORM? Что-то вроде этого кода:
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();
}
$ role - это массив role_id (а не имена!). PS. Я не помню, как запросить «WHERE IN», поэтому я использую выражения DB.
вот как это работает для меня, если у кого-то из вас есть лучшая альтернатива, вы можете отправить его здесь. – leonardys
Я верю, что так оно и должно быть. Также обратите внимание, что вместо 'array_merge()' вы можете использовать помощник Array: '$ results = Arr :: merge ($ staffs, $ manager);'. С уважением. –