繁体   English   中英

序列化原始findAll返回不需要的ID列

[英]Sequelize raw findAll returns unwanted ID column

我正在使用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”以及如何避免使用它,所以我不必迭代该数组即可我想要的格式。

谢谢

经过大量研究,我找到了实现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:[]
    }]
  }]
})

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM