Méthode de recherche CakePHP avec JOIN
La méthode de recherche CakePHP fournit un moyen puissant de récupérer des données de la base de données, y compris la jointure de tables. Cet article présente deux méthodes pour effectuer une requête JOIN à l'aide de la méthode find de CakePHP.
Méthode 1 : Utiliser les relations entre les modèles
Cette méthode implique de définir des relations entre vos modèles et d'utiliser le comportement maîtrisable. Considérez les relations de modèle suivantes :
class User extends AppModel {
public $hasMany = array('Message');
}
class Message extends AppModel {
public $belongsTo = array('User');
}
Avec cette configuration, vous pouvez effectuer la requête suivante à partir du MessagesController :
$this->Message->find('all', array(
'contain' => array('User'),
'conditions' => array(
'Message.to' => 4
),
'order' => 'Message.datetime DESC'
));
Cette requête récupérera tous les messages dont le destinataire (champ à) est 4, et inclura également les informations utilisateur correspondantes pour chaque message.
Méthode 2 : Syntaxe de jointure personnalisée
Vous pouvez également définir des jointures personnalisées en utilisant la syntaxe de CakePHP. Cette approche est adaptée lorsque vous avez besoin de plus de contrôle sur les conditions de jointure :
$this->Message->find('all', array(
'joins' => array(
array(
'table' => 'users',
'alias' => 'UserJoin',
'type' => 'INNER',
'conditions' => array(
'UserJoin.id = Message.from'
)
)
),
'conditions' => array(
'Message.to' => 4
),
'fields' => array('UserJoin.*', 'Message.*'),
'order' => 'Message.datetime DESC'
));
Notez que dans cet exemple, vous devrez changer le nom du champ messages.from en messages.user_id pour correspondre à la convention CakePHP.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3