Có thể bạn nên tạo phương pháp ORM riêng cho nó? Nội dung như mã này:
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();
}
$ vai trò là mảng role_id (không phải tên!). PS. Tôi không nhớ làm thế nào để truy vấn 'WHERE IN', vì vậy tôi sử dụng biểu thức DB.
đây là cách nó hoạt động đối với tôi, nếu có ai trong số các bạn có lựa chọn thay thế tốt hơn, vui lòng đăng nó tại đây. – leonardys
Tôi tin rằng đây là cách thực hiện. Cũng lưu ý rằng thay vì 'array_merge()' bạn có thể sử dụng trình trợ giúp Array: '$ results = Arr :: merge ($ staff, $ managers);'. Trân trọng. –