Maison > base de données > tutoriel mysql > Comment effectuer des requêtes JOIN dans la méthode « find » de CakePHP ?

Comment effectuer des requêtes JOIN dans la méthode « find » de CakePHP ?

Susan Sarandon
Libérer: 2025-01-04 13:47:39
original
175 Les gens l'ont consulté

How to Perform JOIN Queries in CakePHP's `find` Method?

Méthode de recherche CakePHP avec JOIN

Dans CakePHP, la méthode find permet d'effectuer des requêtes de base de données puissantes. Pour effectuer une requête JOIN, vous pouvez soit utiliser la fonctionnalité de confinement intégrée, soit définir des jointures personnalisées.

Confinement (recommandé)

Pour utiliser le confinement, vous devez définir relations entre vos modèles. Par exemple, si vous avez un modèle Message et un modèle Utilisateur, vous déclarerez les associations dans vos modèles :

class User extends AppModel {
    public $hasMany = ['Message'];
}

class Message extends AppModel {
    public $belongsTo = ['User'];
}
Copier après la connexion

Une fois ces relations configurées, vous pouvez effectuer une requête JOIN en incluant contain dans votre recherche appel de méthode :

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

Jointures personnalisées

Si vous préférez définir des jointures personnalisées, vous pouvez utiliser les jointures dans votre appel de méthode find :

$messages = $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

Notez que vous devrez spécifier explicitement l'option de champs lors de l'utilisation de jointures personnalisées pour vous assurer que les champs corrects sont renvoyés.

Utilisation Relations multiples avec le même modèle

Une autre approche consiste à créer plusieurs relations avec le même modèle pour différentes associations. Par exemple, dans le cas de messages, vous pourriez avoir une relation MessageSent pour les messages sortants et une relation MessageReceived pour les messages entrants :

class User extends AppModel {
    public $hasMany = [
        'MessagesSent' => ['className' => 'Message', 'foreignKey' => 'from'],
        'MessagesReceived' => ['className' => 'Message', 'foreignKey' => 'to']
    ];
}

class Message extends AppModel {
    public $belongsTo = [
        'UserFrom' => ['className' => 'User', 'foreignKey' => 'from'],
        'UserTo' => ['className' => 'User', 'foreignKey' => 'to']
    ];
}
Copier après la connexion

Avec ces relations, vous pouvez effectuer une requête JOIN comme suit :

$messages = $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