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
Mary-Kate OlsenOriginal
2024-12-29 19:52:15886Durchsuche

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'];
}

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!

Stellungnahme:
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