Sequelize "raw = true" 更改 json 带点的模型属性名称
Sequelize "raw = true" changes json model attribute name with dot
我有 Content 模型,它有很多子 ContentImage 项目,像这样;
const content = await db.Content.findOne({
where: {
permalink: req.params.permalink
},
include: [{
model: db.ContentImages
}]
raw: true
});
如您所知raw:true
将 SequelizeInstance 隐藏到对象模型。我在这一点上遇到了一些问题。
如果我使用 raw:true
,json 模型会像这样显示我;
{
"id": 4706,
"name": "Content Title",
"content": "Content detail",
"t_content_images.id": 7633,
"t_content_images.content_id": 4706,
"t_content_images.image": "content-image-1.jpg",
"t_content_images.order_no": 1
}
因为expressjs,我需要这个模型而不是SequelizeInstance;
{
"id": 4706,
"name": "Content Title",
"content": "Content detail",
"t_content_images": {
"id": 7633,
"content_id": 4706,
"image": "content-image-1.jpg",
"order_no": 1
}
}
另一个问题,我有多个内容图片,如果我像上面的第一个示例一样使用,它 returns 我只是第一个内容图片。
您对它的考虑有点倒退 - 当您使用 raw: true
时,它 不会 将它从 JSON 对象转换为模型实例.
如果您考虑 SQL 结果的结构,它们总是平淡无奇。这意味着对于将一个基本记录链接到多个子项(在本例中为 Content -< ContentImages
)的联接,SQL 结果将为每个子项重复基本记录的信息。 Sequelize 会将其解析为 JSON 对象,这就是您在问题的第一个示例中看到的对象。如果你遗漏 raw: true
那么它会更进一步并将它解析为你的模型的一个实例。然后,您可以调用 Model.toJSON()
来获取已解析对象的 JSON 表示。
鉴于上述情况,如果您要获取很多子项,那么将数据放入两个查询而不是一个查询中会更有效,这样您就不必将重复数据发送到客户端。
我有 Content 模型,它有很多子 ContentImage 项目,像这样;
const content = await db.Content.findOne({
where: {
permalink: req.params.permalink
},
include: [{
model: db.ContentImages
}]
raw: true
});
如您所知raw:true
将 SequelizeInstance 隐藏到对象模型。我在这一点上遇到了一些问题。
如果我使用 raw:true
,json 模型会像这样显示我;
{
"id": 4706,
"name": "Content Title",
"content": "Content detail",
"t_content_images.id": 7633,
"t_content_images.content_id": 4706,
"t_content_images.image": "content-image-1.jpg",
"t_content_images.order_no": 1
}
因为expressjs,我需要这个模型而不是SequelizeInstance;
{
"id": 4706,
"name": "Content Title",
"content": "Content detail",
"t_content_images": {
"id": 7633,
"content_id": 4706,
"image": "content-image-1.jpg",
"order_no": 1
}
}
另一个问题,我有多个内容图片,如果我像上面的第一个示例一样使用,它 returns 我只是第一个内容图片。
您对它的考虑有点倒退 - 当您使用 raw: true
时,它 不会 将它从 JSON 对象转换为模型实例.
如果您考虑 SQL 结果的结构,它们总是平淡无奇。这意味着对于将一个基本记录链接到多个子项(在本例中为 Content -< ContentImages
)的联接,SQL 结果将为每个子项重复基本记录的信息。 Sequelize 会将其解析为 JSON 对象,这就是您在问题的第一个示例中看到的对象。如果你遗漏 raw: true
那么它会更进一步并将它解析为你的模型的一个实例。然后,您可以调用 Model.toJSON()
来获取已解析对象的 JSON 表示。
鉴于上述情况,如果您要获取很多子项,那么将数据放入两个查询而不是一个查询中会更有效,这样您就不必将重复数据发送到客户端。