Kan*_*n T 3 postgresql join node.js sequelize.js
我是 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;
Run Code Online (Sandbox Code Playgroud)
产品型号
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;
Run Code Online (Sandbox Code Playgroud)
订单模型
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;
Run Code Online (Sandbox Code Playgroud)
我希望通过 SEQUELIZE 执行以下原始查询
SELECT * FROM ((orders INNER JOIN users ON users.id=orders.user_id) INNER JOIN products ON products.id=orders.product_id);
Run Code Online (Sandbox Code Playgroud)
我查看了文档,但不知道该怎么做。任何帮助表示赞赏。谢谢
小智 5
您需要做的第一件事是建立您的协会。
那么让我们把它分成几个部分。我们知道您的 ORDERS 表包含 USER 和 Product 的 id。这就是您为这些表设置关联的方式。
我假设用户有很多订单。我们在两个方向上进行关联。
User.hasMany(订单, {foreignKey: 'user_id'}); Order.belongsTo(User, {foreignKey: 'user_id'});
您似乎已正确定义模型。
// 确保您在此处导入模型以便在下面使用
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));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12263 次 |
| 最近记录: |