Joindre des requêtes avec Sequelize sur Node.js
Problème :
Lors de l'utilisation de l'ORM Sequelize, comment pouvons-nous effectuer des requêtes de jointure pour récupérer les données des tables associées ? En particulier, comment pouvons-nous récupérer les publications ainsi que les informations utilisateur associées ?
Solution :
1. Jointure interne :
Pour effectuer une jointure interne, nous spécifions l'option d'inclusion lors de la requête d'un modèle. Cette option nous permet de spécifier le modèle associé auquel nous souhaitons nous joindre. Par défaut, Sequelize effectue des jointures externes gauches, nous devons donc définir l'option requise sur true pour une jointure interne.
Par exemple, pour récupérer toutes les publications ainsi que leurs informations utilisateur associées, nous pouvons utiliser la requête suivante :
Posts.findAll({ include: [{ model: User, required: true }] }).then(posts => { // Process and return the posts along with the user information. });
2. Jointure externe gauche :
Pour effectuer une jointure externe gauche, nous omettons l'option requise ou la définissons sur false dans l'option d'inclusion. Cela nous permettra de récupérer toutes les publications, y compris celles qui n'ont pas d'utilisateur associé.
Par exemple :
Posts.findAll({ include: [{ model: User, required: false }] }).then(posts => { // Process and return the posts, including those without user information. });
3. Filtrage des résultats de jointure :
Nous pouvons utiliser l'option Where dans l'objet d'inclusion pour filtrer les enregistrements associés. Par exemple, pour récupérer uniquement les publications appartenant à des utilisateurs nés en 1984, nous utiliserions :
Posts.findAll({ include: [{ model: User, where: { year_birth: 1984 } }] }).then(posts => { // Process and return the posts belonging to users born in 1984. });
4. Conditions de jointure complexes :
Nous pouvons également spécifier des conditions de jointure complexes en utilisant l'option Where. Par exemple, pour récupérer les publications portant le nom « Sunshine » qui appartiennent à des utilisateurs nés la même année que la création de la publication, nous utiliserions :
Posts.findAll({ where: { name: "Sunshine" }, include: [{ model: User, where: ["year_birth = post_year"] }] }).then(posts => { // Process and return the posts matching the specified conditions. });
Référence de la documentation :
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!