Heim > Datenbank > MySQL-Tutorial > Wie kann man Tabellen in CakePHP mit der Find-Methode effizient verknüpfen?

Wie kann man Tabellen in CakePHP mit der Find-Methode effizient verknüpfen?

Mary-Kate Olsen
Freigeben: 2024-12-29 19:52:15
Original
890 Leute haben es durchsucht

How to Efficiently Join Tables in CakePHP using the Find Method?

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'];
}
Nach dem Login kopieren

Dann verwenden Sie das einschließbare Verhalten:

$this->Message->find('all', [
    'contain' => ['User'],
    'conditions' => ['Message.to' => 4],
    'order' => 'Message.datetime DESC'
]);
Nach dem Login kopieren

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'
]);
Nach dem Login kopieren

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']];
}
Nach dem Login kopieren

Aufruf suchen:

$this->Message->find('all', [
    'contain' => ['UserFrom'],
    'conditions' => ['Message.to' => 4],
    'order' => 'Message.datetime DESC'
]);
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage