Sequelize query - 是否可以在包含的(内部连接)模型中对字段进行别名

Sequelize query - is it possible to alias field in included (inner join) model

似乎找不到这个问题的答案(如果有的话)。

所以我有 2 个续集模型。该关联工作正常,但我希望从正在执行内部模型的外部模型中为一个字段取别名。

当我执行这个查询时:-

ModelOne.findAll({
    attributes: ['id', ['attribute2', 'attribute2Alias'],],
    include: [{
        model: ModelTwo,
        required: true,
        attributes: [
            ['attribute1', 'attribute1Alias']
        ],
    }],
})

我回来了:-

items: [{
    id: 1,
    attribute2Alias: 'value',
    'ModelTwoTableName.attribute1Alias': 'value'
}]

我知道我可以在返回的行上使用 .map,但是有没有办法通过直接执行别名来避免这种情况?

谢谢。

只有当您在查询中使用'raw:true'时才会发生

我认为你显示的输出是 raw:true 删除那个 然后 运行 你的查询再次

我运行遇到了同样的缺点,找到了解决办法。您可以从顶级属性列表中引用外部列属性。然后使用 sequelize.col() 和 table 名称。这需要 raw:true 否则 sequelize 会报错。外部属性列表可以留空。像这样:

ModelOne.findAll({
    attributes: ['id', ['attribute2', 'attribute2Alias'], [sequelize.col('table2.attribute1'), 'attribute1Alias']],
    include: [{
        model: ModelTwo,
        required: true,
        attributes: [],
    }],
    raw: true,
})

在稳定的 6.0 版本的 Sequelize 中,计算结果如下:

ModelOne.findAll({
...
include: {association: 'modeltwos', attributes: []}
})

注:'modeltwos'是ModelTwo的别名,在ModelOne模型中设置:

static associate({ ModelTwo }) {
      // define association here
      models.ModelOne.hasMany(ModelTwo, { as: 'modeltwos' }); 
}