首页 > 解决方案 > Sequelize raw findAll 返回不需要的 ID 列

问题描述

我正在使用 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 会返回“rowId”,如果我没有将它包含在属性数组中以及如何避免它,所以我不必迭代数组来获取我想要的格式。

谢谢

标签: javascriptnode.jssequelize.js

解决方案


经过大量研究,我找到了实现 Vivek Doshi 的想法的正确方法,attributes即在根级别定义 my only。要实现这一点,您需要使用该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:[]
    }]
  }]
})

推荐阅读