Maison > base de données > tutoriel mysql > Comment utiliser efficacement les JOIN avec la méthode find de CakePHP ?

Comment utiliser efficacement les JOIN avec la méthode find de CakePHP ?

Barbara Streisand
Libérer: 2025-01-03 03:35:43
original
284 Les gens l'ont consulté

How to Efficiently Use JOINs with CakePHP's find Method?

Utilisation de JOIN dans CakePHP find Method

Pour récupérer des données de plusieurs tables à l'aide de JOIN dans CakePHP 2.x, deux méthodes peuvent être utilisées.

Méthode 1 : méthode CakePHP (recommandé)

  1. Définissez des relations : Créez des relations entre vos modèles à l'aide des associations appartiennentTo et hasMany.

    • Ajoutez $actsAs = ['Contenable']; aux deux modèles pour activer le confinement.
  2. Modifier la colonne de message : Remplacez messages.from par messages.user_id pour correspondre à l'association.
  3. Utilisez la méthode find : Exécutez la requête suivante à partir de votre MessagesController :

    $this->Message->find('all', [
        'contain' => ['User'],
        'conditions' => ['Message.to' => 4],
        'order' => 'Message.datetime DESC'
    ]);
    Copier après la connexion

Méthode 2 : JOIN personnalisée

  1. Définir la jointure manuellement : Spécifiez les conditions de jointure directement dans la recherche méthode.

    $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'
    ]);
    Copier après la connexion

Utilisation de deux relations avec le même modèle

Pour utiliser deux relations avec le même modèle, vous pouvez définir des relations distinctes dans vos modèles, tels que :

class User {
    ...
    public $belongsTo = ['MessagesReceived', 'MessagesSent'];
    ...
}

class Message {
    ...
    public $belongsTo = ['UserFrom', 'UserTo'];
    ...
}
Copier après la connexion

Ensuite, vous pouvez utiliser la méthode find avec le approprié relation :

$this->Message->find('all', [
    'contain' => ['UserFrom'],
    'conditions' => ['Message.to' => 4],
    'order' => 'Message.datetime DESC'
]);
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal