首页 文章

Sequelize raw findAll返回不需要的ID列

提问于
浏览
0

我正在使用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',如果我没有将它包含在属性数组中以及如何避免它,那么我不必迭代数组来获取格式我想要 .

谢谢

2 回答

  • 0

    经过大量的研究,我只想在根级别定义我的 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

    您是否仅尝试过根级别的 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
    })
    

相关问题