Node.js est un langage et une plateforme de développement back-end très populaires et largement apprécié par les développeurs. Dans les applications pratiques, des requêtes conjointes sur plusieurs tables sont souvent nécessaires. Nous verrons ensuite comment utiliser Node.js pour implémenter des requêtes conjointes multi-tables.
Tout d'abord, nous devons utiliser le framework ORM fourni par Node.js pour gérer nos données. ORM est l'abréviation de Object Relational Mapping. Il peut mapper les tables de la base de données en objets dans le langage de programmation, permettant aux développeurs d'exploiter la base de données plus facilement. Sequelize est l'un des frameworks ORM les plus couramment utilisés dans Node.js.
Lors de l'interrogation de plusieurs tables, nous pouvons utiliser l'option d'inclusion fournie par Sequelize. L'option include peut inclure d'autres tables et les joindre dans la requête principale.
Ce qui suit est un exemple simple qui montre comment effectuer une requête de jointure multi-tables dans Node.js :
const Sequelize = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', dialect: 'mysql', }); const Order = sequelize.define('Order', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, name: Sequelize.STRING, }); const Product = sequelize.define('Product', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, title: Sequelize.STRING, price: Sequelize.FLOAT, }); const OrderItem = sequelize.define('OrderItem', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, }); Order.hasMany(OrderItem); Product.hasMany(OrderItem); OrderItem.belongsTo(Order); OrderItem.belongsTo(Product); // 查询订单并包含相关产品信息 Order.findAll({ include: [{ model: Product }], }).then((orders) => { console.log(JSON.stringify(orders)); });
Dans cet exemple, nous avons défini trois tables, Order, Product et OrderItem. Il existe une relation plusieurs-à-plusieurs entre Order et Product, qui est implémentée via la table OrderItem. Nous pouvons utiliser l'option d'inclusion pour joindre les tables Commande et Produit et interroger toutes les informations sur la commande et les informations sur les produits associés.
Lorsque nous exécutons le code ci-dessus, sequelize exécutera l'instruction SQL suivante pour interroger la commande et les informations sur le produit correspondantes :
SELECT `Order`.*, `Product`.`id` AS `Products.id`, `Product`.`title` AS `Products.title`, `Product`.`price` AS `Products.price`, `ProductsOrderItem`.`id` AS `Products.OrderItem.id`, `ProductsOrderItem`.`OrderId` AS `Products.OrderItem.OrderId`, `ProductsOrderItem`.`ProductId` AS `Products.OrderItem.ProductId`, `ProductsOrderItem`.`createdAt` AS `Products.OrderItem.createdAt`, `ProductsOrderItem`.`updatedAt` AS `Products.OrderItem.updatedAt` FROM `Orders` AS `Order` LEFT OUTER JOIN (`OrderItems` AS `ProductsOrderItem` INNER JOIN `Products` AS `Product` ON `ProductsOrderItem`.`ProductId` = `Product`.`id`) ON `Order`.`id` = `ProductsOrderItem`.`OrderId`;
L'instruction SQL ci-dessus renvoie un tableau JSON contenant des informations sur la commande et le produit.
En plus d'inclure des tables associées, nous pouvons également utiliser d'autres options et méthodes fournies par Sequelize pour interroger des données spécifiques. Par exemple, nous pouvons utiliser l'option Where pour interroger des données avec des conditions spécifiées :
Order.findAll({ include: [{ model: Product }], where: { name: 'John Doe', }, }).then((orders) => { console.log(JSON.stringify(orders)); });
Dans le code ci-dessus, nous interrogeons toutes les commandes portant le nom « John Doe » et les associons pour interroger toutes les informations sur le produit associées.
Pour résumer, les requêtes de jointure multi-tables peuvent être implémentées via Sequelize dans Node.js. Grâce à l'option d'inclusion, nous pouvons facilement interroger les informations associées dans la table associée. Dans les applications réelles, vous pouvez utiliser d'autres options et méthodes fournies par Sequelize selon vos besoins pour effectuer des requêtes de jointure multi-tables plus complexes.
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!