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' });
}
似乎找不到这个问题的答案(如果有的话)。
所以我有 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' });
}