Heim >Datenbank >MySQL-Tutorial >Wie kann man Tabellen in CakePHP mit der Find-Methode effizient verknüpfen?
Tabellen mit der Find-Methode von CakePHP verbinden
Um Daten aus mehreren Tabellen mit der Find-Methode von CakePHP abzurufen, ziehen Sie die folgenden Optionen in Betracht:
Standard-CakePHP-Methode
Stellen Sie Beziehungen zwischen Ihren her Modelle mithilfe der Eigenschaften „actsAs“ und „hasMany“ oder „gehörtTo“ erstellen. Zum Beispiel:
class User extends AppModel { public $actsAs = ['Containable']; public $hasMany = ['Message']; } class Message extends AppModel { public $actsAs = ['Containable']; public $belongsTo = ['User']; }
Dann verwenden Sie das einschließbare Verhalten:
$this->Message->find('all', [ 'contain' => ['User'], 'conditions' => ['Message.to' => 4], 'order' => 'Message.datetime DESC' ]);
Benutzerdefinierter Join
Definieren Sie einen benutzerdefinierten Join innerhalb Ihrer Suchmethode :
$this->Message->find('all', [ 'joins' => [ [ 'table' => 'users', 'alias' => 'UserJoin', 'type' => 'INNER', 'conditions' => ['UserJoin.id = Message.from'] ] ], 'conditions' => ['Message.to' => 4], 'fields' => ['UserJoin.*', 'Message.*'], 'order' => 'Message.datetime DESC' ]);
Zwei Beziehungen zum selben nutzen Modell
Um Daten basierend auf zwei Beziehungen zum selben Modell abzurufen, ändern Sie Ihre Modelle und verwenden Sie das einschließbare Verhalten:
class User extends AppModel { public $actsAs = ['Containable']; public $hasMany = ['MessagesSent' => ['className' => 'Message', 'foreignKey' => 'from']]; public $belongsTo = ['MessagesReceived' => ['className' => 'Message', 'foreignKey' => 'to']]; } class Message extends AppModel { public $actsAs = ['Containable']; public $belongsTo = ['UserFrom' => ['className' => 'User', 'foreignKey' => 'from']]; public $hasMany = ['UserTo' => ['className' => 'User', 'foreignKey' => 'to']]; }
Aufruf suchen:
$this->Message->find('all', [ 'contain' => ['UserFrom'], 'conditions' => ['Message.to' => 4], 'order' => 'Message.datetime DESC' ]);
Das obige ist der detaillierte Inhalt vonWie kann man Tabellen in CakePHP mit der Find-Methode effizient verknüpfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!