2010-08-24 17 views

risposta

9

Non ho trovato un modo semplice per farlo usando l'ORM, ma ho una soluzione.
Questo è il mio codice per chiunque possa incontrare lo stesso problema con me.

// 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

questo è come funziona per me, se qualcuno di voi ha un'alternativa migliore si sente libero di postarlo qui. – leonardys

+0

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

1

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.

+0

La query manuale SQL è sempre disponibile, ma ho pensato prima che ORM potesse risolvere il problema immediatamente. Non ho molte esperienze con il generatore di query, ci penso. Grazie per la risposta alternativa. – leonardys

+0

Come puoi vedere, il mio codice usa $ this -> _ has_many ['roles'] settings, quindi se cambi modello correlato o foreign_key, questo metodo funzionerà senza alcuna modifica (invece di semplici query SQL). – biakaveron

+0

Does '-> dove ($ this -> _ primary_key, 'IN', $ ids)' non funziona? –

Problemi correlati