Frage

Ich lerne den Rahmen, und jetzt eine Anwendung den Aufbau mit ihm.

Ich brauche alle Benutzer zu erhalten, die ‚Nutzer‘ oder ‚Personal‘ Rolle, aber ich konnte nicht darüber auf der Dokumentation.

Hilfe anyone? (Ich glaube, es ist mehr ein ORM Problem das die Auth-Modul)

War es hilfreich?

Lösung

Ich habe nicht einen einfachen Weg finden dies mit der ORM zu tun, aber ich habe eine Abhilfe.
Dies ist mein Code für jeden, der das gleiche Problem mit mir auftreten kann.

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

Andere Tipps

Mai werden Sie eine separate ORM Methode dafür schaffen sollte? So etwas wie dieser Code:

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();
}

$ Rollen ist ein role_id Array (keine Namen!). PS. Ich erinnere mich nicht, wie man die Suche nach 'WHERE IN', so verwende ich DB Ausdrücke.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top