Frage

Zum Beispiel:

Ich brauche einen Satz von männlichem Benutzer- IDs, Vornamen und Nachnamen zu holen, aber sonst nichts.

Also habe ich eine Funktion in UserMapper namens fetchAllMaleUsers (), dass die Renditen eine Reihe von Benutzereinheiten.

heißt:

public function fetchAllMaleUsers() {
        $select = $this->getDbTable()
                        ->select()
                        ->from($this->getDbTable(),
                                array('ID', 'FirstName', 'LastName'))
                        ->where('Gender = ?', 'M');

        $resultSet = $this->getDbTable()->fetchAll($select);

        $users = array();
        foreach ($resultSet as $row) {
            $user = new Application_Model_User();
            $user->setId($row->ID)
                 ->setFirstName($row->FirstName)
                 ->setLastName($row->LastName);
            $users[] = $user;
        }

        return $users;
    }
  1. Ist diese Funktion, gehört in der Mapper Schicht?
  2. Ist es in Ordnung, nur setzen Sie die Id, Vornamen und Nachnamen jeden Benutzer Einheit?
War es hilfreich?

Lösung

1) Vollkommen in Ordnung für den Mapper / Gateway oder aber Sie es nennen.
2) Sie können tun, aber ich dies sehr disencourage. Warum? Später in der Anwendung kann nicht sagen, von wo aus Sie haben das Modell bekommen. So dass Sie überprüfen müssen, würde, wenn ein Wert in Ihrem Modell jedes Mal eingestellt wird Sie nicht sicher sind, ob sie gesetzt ist oder Sie würden einige autoloading Sachen brauchen Werte für fehlende (die als fehlende Sachen wie schlimmer ist). Ein weiterer Grund ist, dass Sie nicht die Funktion für andere porposes wieder verwenden können, wo Sie andere Eigenschaften des Benutzermodells benötigen. Letzter Grund AFAIK ist, dass ein Modell jederzeit die komplette Einheit darstellt, nicht Teile davon. Und es gibt keinen wirklichen Grund, warum nicht alle Felder laden (neben Verweisen auf andere Entitäten, warum sowieso automatisch geladen werden soll).

Andere Tipps

Zusammen mit FGE Antwort Ich glaube, dass $ resultSet soll bereits Werte vom Typ Application_Model_User zurückkehren. Wenn nicht, können Sie $ _rowClass in Application_Model_DbTable_User einstellen müssen.

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