Méthode de recherche CakePHP avec JOIN
Pour exécuter des requêtes de base de données complexes, CakePHP propose la méthode find, qui permet des capacités d'interrogation flexibles. Une tâche courante consiste à récupérer les données de plusieurs tables à l'aide d'une opération JOIN.
L'approche CakePHP standard
CakePHP 2.x fournit un moyen simple de joindre des tables à l'aide de l'option comportement maîtrisable. En établissant des relations entre les modèles via hasMany et appartiennentTo, vous pouvez récupérer de manière transparente les données associées via une seule requête.
Par exemple, supposons que vous disposez d'un modèle Message et d'un modèle Utilisateur. Le champ messages.from fait référence au champ users.id. Pour rejoindre ces tables et récupérer les informations utilisateur ainsi que les messages, procédez comme suit :
class User extends AppModel { public $actsAs = array('Containable'); public $hasMany = array('Message'); } class Message extends AppModel { public $actsAs = array('Containable'); public $belongsTo = array('User'); }
$this->Message->find('all', array( 'contain' => array('User'), 'conditions' => array( 'Message.to' => 4 ), 'order' => 'Message.datetime DESC' ));
Syntaxe de JOIN personnalisée
Vous pouvez également définir des jointures personnalisées à l'aide de l'option 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' ));
Utiliser plusieurs relations avec le même Modèle
Dans certains cas, vous souhaiterez peut-être établir plusieurs relations avec le même modèle. Voici un exemple :
class User extends AppModel { public $actsAs = array('Containable'); public $hasMany = array( 'MessagesSent' => array( 'className' => 'Message', 'foreignKey' => 'from' ) ); public $hasBelongsTo = array( 'MessagesReceived' => array( 'className' => 'Message', 'foreignKey' => 'to' ) ); }
Avec cette configuration, vous pouvez exécuter la requête suivante :
$this->Message->find('all', array( 'contain' => array('UserFrom'), 'conditions' => array( '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!