在Sequelize Model.create上设置raw = true

Mon*_*Mon 3 orm node.js sequelize.js

我希望能够在调用Model.createSequelize 之后接收普通的原始对象,Sequelize是创建的对象本身,没有元数据或任何其他东西.就像{raw: true}选项一样Model.find.

我已经看到了这个答案: 将所有查询设置为raw = true sequelize,不,Model.create({name: 'test'}, {raw: true})不起作用.

谢谢

Mon*_*Mon 12

非常感谢您的帮助.我找到了一个解决方案,虽然这不是我正在寻找的,但它有效,而且还很好.

sequelize实体有一个.get()返回普通对象版本的方法.所以它是这样的:

Model.create(modelObject)
.then((resultEntity) => {
    const dataObj = resultEntity.get({plain:true})
}
Run Code Online (Sandbox Code Playgroud)

来自这个线程:Sequelize,将实体转换为普通对象.寻找CharlesA的答案.

没有尝试使用数组,但如果您遇到结果数组问题,请检查它的注释和旁边的答案.但由于.create()只返回一个对象,它对我有用.无论如何,如果您正在使用.findAll(),您应该使用{raw: true}选项而不是此解决方案,因为它适用于该方法.

PS如果有人仍然有一个解决方案,其中Sequelize本身不会返回那个大的resultEntity对象,而只是普通的数据对象,就像{raw: true}选项一样(因为我认为它仍然更轻?),我们是开放的.

非常感谢你.

  • 为什么 Sequelize 不为 create 实现 {raw: true} ?! (2认同)

小智 6

Model.create(modelObject)
.then((resultEntity) => {
    const dataObj = resultEntity.get({plain:true})
}
Run Code Online (Sandbox Code Playgroud)

就像之前提到的,或者如果您想保留 async/await 语法,请执行以下操作:

const myResultVar = (await Model.create(modelObject)).get({plain:true})
Run Code Online (Sandbox Code Playgroud)

基本上是同样的事情,只是没有留下 async/await 语法:)