删除join查询结果中的前缀tablename

rbl8hiat  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(531)

使用nodejs(10.15.0)、sequelize(4.42.0)和mysql,我尝试从join查询的结果中删除表路径。

Table1
    .findAll({
      attributes: ['id', 'name', 'other'],
      include: [{
        attributes: ['code_id'],
        model: Table2,
        nested: false,
        required: true,
      }],
      raw: true,
    })

查询结果

[
  {
    "id": 1,
    "name": "stuff",
    "other": true,
    "table2.code_id": 1,
  }
]

期待发生

[
  {
    "id": 1,
    "name": "stuff",
    "other": true,
    "code_id": 1,
  }
]
bq3bfh9z

bq3bfh9z1#

删除 raw: true, -它阻止sequelize将结果解析为对象。如果不想使用模型示例,则需要为结果编写自己的解析器。
请注意,它将解析为以下结构(“table2”将是一个属性):

[
  {
    "id": 1,
    "name": "stuff",
    "other": true,
    "table2": {
      "code_id": 1,
    }
  }
]

或者,您可以为子行设置别名,但请注意,它将进入 dataValues 除非创建Map到它的虚拟字段。

Table1
.findAll({
  attributes: [
    'id', 'name', 'other',
    [sequelize.col('table2.code_id'), 'code_id'], // aliased here
  ],
  include: [{
    attributes: [],
    model: Table2,
    required: true,
  }],
  raw: true,
})

相关问题