CakePHP Find-Methode mit JOIN
Um komplexe Datenbankabfragen auszuführen, bietet CakePHP die Find-Methode an, die flexible Abfragemöglichkeiten ermöglicht. Eine häufige Aufgabe besteht darin, Daten aus mehreren Tabellen mithilfe einer JOIN-Operation abzurufen.
Der Standard-CakePHP-Ansatz
CakePHP 2.x bietet eine unkomplizierte Möglichkeit, Tabellen mithilfe von zu verknüpfen beherrschbares Verhalten. Indem Sie Beziehungen zwischen Modellen über „hasMany“ und „gehörtTo“ herstellen, können Sie verwandte Daten nahtlos über eine einzige Abfrage abrufen.
Nehmen wir zum Beispiel an, Sie haben ein Message-Modell und ein User-Modell. Das Feld „messages.from“ verweist auf das Feld „users.id“. Um diese Tabellen zu verknüpfen und Benutzerinformationen zusammen mit Nachrichten abzurufen, führen Sie die folgenden Schritte aus:
class User extends AppModel { public $actsAs = array('Containable'); public $hasMany = array('Message'); } class Message extends AppModel { public $actsAs = array('Containable'); public $belongsTo = array('User'); }
$this->Message->find('all', array( 'contain' => array('User'), 'conditions' => array( 'Message.to' => 4 ), 'order' => 'Message.datetime DESC' ));
Benutzerdefinierte JOIN-Syntax
Alternativ können Sie benutzerdefinierte Joins mithilfe der Joins-Option definieren:
$this->Message->find('all', array( 'joins' => array( array( 'table' => 'users', 'alias' => 'UserJoin', 'type' => 'INNER', 'conditions' => array( 'UserJoin.id = Message.from' ) ) ), 'conditions' => array( 'Message.to' => 4 ), 'fields' => array('UserJoin.*', 'Message.*'), 'order' => 'Message.datetime DESC' ));
Verwendung mehrerer Beziehungen zum selben Modell
In manchen Fällen möchten Sie möglicherweise mehrere Beziehungen zu demselben Modell herstellen. Hier ein Beispiel:
class User extends AppModel { public $actsAs = array('Containable'); public $hasMany = array( 'MessagesSent' => array( 'className' => 'Message', 'foreignKey' => 'from' ) ); public $hasBelongsTo = array( 'MessagesReceived' => array( 'className' => 'Message', 'foreignKey' => 'to' ) ); }
Mit diesem Setup können Sie die folgende Abfrage ausführen:
$this->Message->find('all', array( 'contain' => array('UserFrom'), 'conditions' => array( 'Message.to' => 4 ), 'order' => 'Message.datetime DESC' ));
Das obige ist der detaillierte Inhalt vonWie führe ich JOIN-Operationen mit der Find-Methode von CakePHP durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!