gpt4 book ai didi

node.js - 如何在 Sequelize Postgresql 中执行多个内部连接

转载 作者:行者123 更新时间:2023-11-29 12:54:33 25 4
gpt4 key购买 nike

我是 RDBMS 和 Sequelize 的新手,也想探索更多现在被 JOINS 吸引的东西。我不知道如何通过 SEQUELIZE 执行 JOINS。我有 3 个表 USERS、ORDERS、PRODUCTS ORDERS 表包含 USERS、PRODUCTS 主键作为其外键。我在下面附上我的型号代码用户模型

const Sequelize = require('sequelize');
const sequelize = require('../config');
let Users = sequelize.define('users', {
id : {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
username: {
type: Sequelize.STRING,
},
password: {
type: Sequelize.STRING
}
});
module.exports = Users;

产品型号

const Sequelize = require('sequelize');
const sequelize = require('../config');
let products=sequelize.define('products', {
id : {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
category : {
type: Sequelize.STRING,
allowNull: false
},
name : {
type: Sequelize.STRING,
allowNull: false
},
price: {
type: Sequelize.INTEGER,
allowNull: false
}
});
module.exports= products;

订单模型

const Sequelize = require('sequelize');
const sequelize = require('../config');
let users=require('./user');
let products=require('./product');
let orders=sequelize.define('orders', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
user_id: {
type: Sequelize.INTEGER,
references: {
model: 'users',
key: 'id'
}
},
product_id: {
type: Sequelize.INTEGER,
references: {
model: 'products',
key: 'id'
}
},
price: {
type: Sequelize.INTEGER,
allowNull: false
}
});
module.exports= orders;

我希望通过 SEQUELIZE 执行以下原始查询

SELECT * FROM ((orders INNER JOIN users ON users.id=orders.user_id) INNER JOIN products ON products.id=orders.product_id);

我已经查看了文档,但我不知道该怎么做。任何帮助表示赞赏。谢谢

最佳答案

您需要做的第一件事是设置您的 Associations .

所以让我们把它分解成几个部分。我们知道您的 ORDERS 表包含 USER 和 PRODUCT 的 ID。这就是您为这些表设置关联的方式。

  1. 我假设用户有很多订单。我们建立双向联系。

    User.hasMany(Orders, {foreignKey: 'user_id'});Order.belongsTo(用户, {foreignKey: 'user_id'});

您似乎正确定义了模型。

  1. 现在为了进行连接,在设置关联之后,我们要设置一个查询来对表进行连接。请记住,这将在您的 Controller 中完成。

//确保您在此处导入您的模型以便在下方使用

export function getRequestsByWeek(req, res) {
return order.findAll({
include: [
{model: users, attributes: []}, // nothing in attributes here in order to not import columns from users
{model: products} // nothing in attributes here in order to not import columns from products
],
attributes: ['id'], //in quotes specify what columns you want, otherwise you will pull them all
// Otherwise remove attributes above this line to import everything.
})
.then(respondWithResult(res))
.catch(handleError(res));
}

关于node.js - 如何在 Sequelize Postgresql 中执行多个内部连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46551060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com