Maison >base de données >tutoriel mysql >Comment utiliser efficacement les JOIN avec la méthode find de CakePHP ?
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é)
Définissez des relations : Créez des relations entre vos modèles à l'aide des associations appartiennentTo et hasMany.
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' ]);
Méthode 2 : JOIN personnalisée
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' ]);
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']; ... }
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' ]);
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!