2010-08-24 28 views

Trả lời

9

Tôi đã không tìm thấy cách dễ dàng để thực hiện việc này bằng ORM, nhưng tôi có một giải pháp thay thế.
Đây là mã của tôi cho bất kỳ ai có thể gặp phải vấn đề tương tự với tôi.

// One for each role 
$staffs = ORM::factory('role', array('name' => 'staff'))->users->find_all()->as_array(); 
$managers = ORM::factory('role', array('name' => 'manager'))->users->find_all()->as_array(); 

// Merge the results 
$results = array_merge($staffs, $managers); 
+0

đâ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

+0

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. –

1

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.

+0

Truy vấn sql thủ công luôn có sẵn, nhưng tôi nghĩ trước đó ORM có thể giải quyết vấn đề đó ra khỏi hộp. Tôi không có nhiều kinh nghiệm với trình tạo truy vấn, tôi nhìn vào nó. Cảm ơn câu trả lời thay thế. – leonardys

+0

Như bạn có thể thấy, mã của tôi sử dụng cài đặt $ this -> _ has_many ['roles'], vì vậy nếu bạn thay đổi mô hình liên quan hoặc Foreign_key, phương thức này sẽ hoạt động mà không cần sửa đổi (thay vì truy vấn SQL đơn giản). – biakaveron

+0

Có '-> ở đâu ($ this -> _ primary_key, 'IN', $ ids)' không hoạt động? –

Các vấn đề liên quan