gpt4 book ai didi

json - 从带有关联的 Sequelize 返回平面对象

转载 作者:行者123 更新时间:2023-12-03 22:15:16 26 4
gpt4 key购买 nike

我正在努力将我的所有查询转换为 sequelize。
The problem I have come across is that when select queries include associations (ex. one to many), the object I get is an array of nested objects.

它看起来像:

[   
{
"field1": "someval",
"field2": "someval1",
"assoc_table": {
"field_a": 1,
"field_b": "someval"
}
},
{
"field1": "someval",
"field2": "someval3",
"assoc_table": {
"field_a": 5,
"field_b": "someval"
}
},
{
"field1": "someval",
"field2": "someval3",
"assoc_table": {
"field_a": 12,
"field_b": "someval"
}
}
]

我尝试使用不同的模块来展平对象(在循环内,每个对象单独),但我总是得到一个错误,告诉我我试图展平的不仅仅是对象。

此外,我更愿意避免对象被展平的部分,并简单地通过 sequelize 获得平坦的结果。

sequelize 代码如下所示:
models.table1.findAll({
attributes: ['field1', 'field2'],
where: {field1: someval},
include: [{model: models.assoc_table, required: true, attributes:['field_a', 'field_b']}]
}).then(function (result) {
res.send(result);
}).catch(function(error) {
console.log(error);
});

最佳答案

您的部分问题可能是您的 result是一个模型实例数组,所以如果你没有调用 toJSON,你可能会遇到展平它的问题在数组中的元素上。我提供了可以使您的示例变平的代码:

result.forEach(obj => { 
Object.keys(obj.toJSON()).forEach(k => {
if (typeof obj[k] === 'object') {
Object.keys(obj[k]).forEach(j => obj[j] = obj[k][j]);
}
});
});

您也可以添加 raw: true作为 findAll 的一个选项,这将使您的对象变平,但它看起来像这样:
[   
{
"field1": "someval",
"field2": "someval1",
"assoc_table.field_a": 1,
"assoc_table.field_b": "someval"
},
...
]

关于json - 从带有关联的 Sequelize 返回平面对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41502699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com