Frage

Ich möchte die Daten alle 3 Tabellen abrufen

Benutzer, Eigenschaften und users_properties.

Also beschloss ich, ich würde die manytomanyRowset verwenden. Aber zu meiner Überraschung erhalte ich die Daten aus den Eigenschaften und users_properties Tabelle, aber keine Daten aus der Benutzer-Tabelle. Warum ist das so? Ich brauche ein paar Spalten aus der Benutzer-Tabelle gibt es eine Möglichkeit, die manytomanyrowset Funktion zu sagen, dass ich auch die Daten aus der aktuellen Tabelle müssen?

Das ist meine Funktion

public function fetchRegisteredProperties()
{

    $userTable = $this->getTable();
    require_once APPLICATION_PATH . '/models/DbTable/UsersPropertiesDB.php';
    require_once APPLICATION_PATH . '/models/DbTable/PropertiesDB.php';

    $propertiesRowset = $table->fetchAll();
    $allProperties = array();

    foreach ($propertiesRowset as $row) {
        $propertiesRowset = $row->findManyToManyRowset(
          'Model_DbTable_Properties','Model_DbTable_UsersProperties');
        $allProperties = array_merge($tempArray,$propertiesRowset->toArray()); 
    }

    return $allProperties;
}

Vielen Dank im Adavance

War es hilfreich?

Lösung

I entworfen und codiert die Tabellenbeziehungen Funktionen in Zend Framework.

Die Antwort auf Ihre Frage ist nicht, die findManyToManyRowset() Methode holt nur Zeilen aus der verknüpften Tabelle, ist es nicht, sie in die entsprechende Zeile Objekt verschmelzen. Der Grund dafür ist, dass ein Zeilenobjekt in ZF kann sich auf die Datenbank save() zurück, und wenn Sie Felder hinzufügen, wird es nicht wissen, was mit ihnen zu tun.

So haben Sie eine eigene Zeilen Objekt implementieren sollten beide Benutzerfelder und die Sammlung von Benutzereigenschaften zu halten -. Speichern Sie die Benutzereigenschaften als Rowset Objekt

Dann __get() und __set() erstrecken, so dass sie weiß, wie Felder in die richtige Array abzubilden, wenn Sie Objekteigenschaften lesen oder schreiben. Das heißt, wenn man versucht, ein Feld zu lesen oder schreiben, die nicht Teil der Benutzer Zeile ist, fällt es zurück zu den Benutzereigenschaften Rowset.

Auch save() erstrecken sich nicht nur auf die aktuelle Zeile zu speichern, sondern auch save() auf dem Rowset von Benutzereigenschaften nennen.

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