您好我正在尝试在一对多表之间进行查询(一个用户有很多首选项)。目前,我有一个查询,包括在User表中搜索用户的ID以及在Preferences表中搜索该ID。这是我的工作解决方案。
const {username} = req.params
User.findOne({where: {username: username}, attributes:['id']})
.then(res => {
const obj = res.get({plain:true})
Preferences.findAll({ where:{ userId: obj.id}})
.then(res => {
const data = res.map((r) => (r.toJSON()));
console.log('sucess: ', data)
})
.catch(err => console.log('inner error'))
.catch(err => console.log('outer error', err))
})
如何使用.findAll查询对其进行优化?我已经提出了以下查询,该查询返回Preferences表中具有外键的所有用户。但是,我无法让这个用于特定的用户名。
Preferences.findAll({
include: [{
model: User,
where: {userId: sequelize.where(Sequelize.col('userId'), Sequelize.col('User.id'))}
}]
})
如果这个问题已经得到解答,请你指点我的帖子吗?我一直在挖掘Stack Overflow解决方案,但没有任何运气。提前谢谢!
// ============================
这是最终解决方案,以防将来帮助任何人。我修复了模型之间的关联并调整了查询:
//User has many Preferences
User.hasMany(models.Preferences, {
foreignKey: 'userId',
sourceKey: 'id',
});
//Preferences has one User
Preferences.belongsTo(models.User,{
foreignKey: 'userId',
targetKey: 'id',
onDelete: 'CASCADE',
});
//Query for Preferences by Username
get: (req, res) => {
const {username} = req.params
User.findAll({
include: [{
model: Preferences,
}],
where: {username: username}
})
.then(response => {
const data = response.map((r) => (r.toJSON()));
console.log('success: ', data[0].Preferences)
})
.catch(err => console.log('outer error', err))
}
答案 0 :(得分:0)
User.findAll({
include: [{
model: Preferences,
where: { userId: Sequelize.col('user.id') }
}]
})
sequlize文档以创建关联http://docs.sequelizejs.com/manual/tutorial/associations.html
此处还有一个有用的博客链接,https://medium.com/@THEozmic/how-to-create-many-to-many-relationship-using-sequelize-orm-postgres-on-express-677753a3edb5
如果遇到任何错误,请通过评论告诉我。