我正在使用Sequelize使用INNER JOINS进行SELECT查询,如下例所示:
let result=await model.findAll({
attributes:[['att1', 'alias1'], ['att2', 'alias2']],
include:[{
model:model1,
attributes:[['att3', 'alias3']],
include:[{
model:model2,
attributes:[['att4', 'alias4']]
}]
}],
limit:50,
raw:true
})
我想获取具有以下格式的对象数组:
{
alias1:value1,
alias2:value2,
alias3:value3,
alias4:value4
}
但是我得到了:
{
alias1:value1,
alias2:value2,
model1.alias3:value3,
model1.model2.id:rowId,
model1.model2.alias4:value4
}
我想知道是否有删除“模型”的方法。属性名称的一部分,以及是否有人可以解释我,如果我没有在属性数组中包含Sequelize的原因,为什么Sequelize返回“ rowId”以及如何避免使用它,所以我不必迭代该数组即可我想要的格式。
谢谢
答案 0 :(得分:1)
经过大量研究,我找到了实现Vivek Doshi仅在根级别定义attributes
的想法的正确方法。为此,您需要使用Sequelize.col()
函数并传递Sequelize为表创建的别名作为参数,通常类似于table1->table2.attribute
。因此,我的示例的工作版本为:
let result= await model.findAll({
attributes:[
['att1', 'alias1'], ['att2', 'alias2'], [Sequelize.col('table1.att3'),
'alias3'], [Sequelize.col('table1->table2.att4'), 'alias4']],
include:[{
model:model1,
attributes:[],
include:[{
model:model2,
attributes:[]
}]
}]
})
答案 1 :(得分:0)
您是否只在根级别尝试过attribute
>
await model.findAll({
attributes:[['att1', 'alias1'], ['att2', 'alias2'] , ['model1.att3', 'alias3'] , ['model1.model2.att4', 'alias4']],
// OR
// attributes:[['att1', 'alias1'], ['att2', 'alias2'] , ['$table1.att3$', 'alias3'] , ['$table1.table2.att4$', 'alias4']],
include:[{
model:model1
include:[{
model:model2
}]
}],
limit:50,
raw:true
})