如何在 nodejs 中使用 sequelize 编写嵌套查询
How to write nested queries using sequelize in nodejs
我正在尝试使用此查询的 sequelize 编写嵌套查询。
const userIdPriorityLevel = await db.sequelize.query(
`select "p_level" from roles where id=(select "roleId" from users where id='${userId}');`
, { raw: true });
上面的查询是这样工作的
用户table
id roleId
1 2
2 3
角色table
id p_level
2 4324
3 3423
请帮助如何做到这一点。
更新:
const userIdPriorityLevel = await db.Role.findAll({
attributes: ['p_level'],
include: [{
model: db.User,
required: true,
attributes: [],
where: {
id: userId
}
}
]
})
console.log("userid ", userIdPriorityLevel)
当我打印上面的查询时,它给了我这个输出
userid [
role {
dataValues: { p_level: 700 },
_previousDataValues: { p_level: 700 },
_changed: Set(0) {},
_options: {
isNewRecord: false,
_schema: null,
_schemaDelimiter: '',
include: [Array],
includeNames: [Array],
includeMap: [Object],
includeValidated: true,
attributes: [Array],
raw: true
},
isNewRecord: false
}
]
我只想从上面的输出中提取这个 p_level: 700
值。尝试这样的事情
const userPriorityLevel = userIdPriorityLevel[0][0]['p_level']
但它不起作用。
考虑到你也有 Role.hasMany(User)
关联,你可以尝试这样的事情:
const roles = await Roles.findAll({
attributes: ['p_level'],
include: [{
model: User,
required: true,
attributes: [],
where: {
id: userId
}
}
]
})
更新: 从每个模型实例的 Sequelize 查询调用 get({ plain: true })
中获取普通对象:
const plainRoles = roles.map(x => x.get({ plain: true }))
我正在尝试使用此查询的 sequelize 编写嵌套查询。
const userIdPriorityLevel = await db.sequelize.query(
`select "p_level" from roles where id=(select "roleId" from users where id='${userId}');`
, { raw: true });
上面的查询是这样工作的
用户table
id roleId
1 2
2 3
角色table
id p_level
2 4324
3 3423
请帮助如何做到这一点。
更新:
const userIdPriorityLevel = await db.Role.findAll({
attributes: ['p_level'],
include: [{
model: db.User,
required: true,
attributes: [],
where: {
id: userId
}
}
]
})
console.log("userid ", userIdPriorityLevel)
当我打印上面的查询时,它给了我这个输出
userid [
role {
dataValues: { p_level: 700 },
_previousDataValues: { p_level: 700 },
_changed: Set(0) {},
_options: {
isNewRecord: false,
_schema: null,
_schemaDelimiter: '',
include: [Array],
includeNames: [Array],
includeMap: [Object],
includeValidated: true,
attributes: [Array],
raw: true
},
isNewRecord: false
}
]
我只想从上面的输出中提取这个 p_level: 700
值。尝试这样的事情
const userPriorityLevel = userIdPriorityLevel[0][0]['p_level']
但它不起作用。
考虑到你也有 Role.hasMany(User)
关联,你可以尝试这样的事情:
const roles = await Roles.findAll({
attributes: ['p_level'],
include: [{
model: User,
required: true,
attributes: [],
where: {
id: userId
}
}
]
})
更新: 从每个模型实例的 Sequelize 查询调用 get({ plain: true })
中获取普通对象:
const plainRoles = roles.map(x => x.get({ plain: true }))