【问题标题】:Set raw = true on Sequelize Model.create在 Sequelize Model.create 上设置 raw = true
【发布时间】:2018-01-15 18:13:22
【问题描述】:

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

我已经看到了这个答案: Setting all queries to raw = true sequelize, 不,Model.create({name: 'test'}, {raw: true}) 不起作用。

谢谢

【问题讨论】:

标签: node.js orm sequelize.js


【解决方案1】:

我来得太晚了,但也许这会帮助其他人像我一样搜索这个。

在您的查询选项中,而不是

{raw: true}

试试

{plain: true}

为我工作

我认为这也是一个选项,您可以将其传递给与数据库的 sequelize 连接,以便让您以普通/原始的形式返回:

类似的东西:

.... new Sequelize('dbUrl',{query:{raw:true, plain:true}, logging: false});

干杯!

【讨论】:

    【解决方案2】:
    Model.create(modelObject)
    .then((resultEntity) => {
        const dataObj = resultEntity.get({plain:true})
    }
    

    如前所述,或者如果您想使用 async/await 语法,请使用:

    const myResultVar = (await Model.create(modelObject)).get({plain:true})
    

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

    【讨论】:

    • 嗨 :) 您不需要重复其他答案。您的替代选项足以单独编写为答案。
    【解决方案3】:

    您还可以对从查询返回的模型实例使用 .toJSON()。 http://docs.sequelizejs.com/class/lib/model.js~Model.html#instance-method-toJSON

    【讨论】:

    • 感谢 Kevin,找到内置解决方案,并作为答案发布
    • 我注意到.toJSON() 返回整个对象?你知道如何将它与attributes 配对以过滤返回的内容吗?
    【解决方案4】:

    非常感谢您的帮助。我找到了一个解决方案,虽然这不是我想要的,但它有效,而且仍然很好。

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

    Model.create(modelObject)
    .then((resultEntity) => {
        const dataObj = resultEntity.get({plain:true})
    }
    

    来自此线程:Sequelize, convert entity to plain object。寻找 CharlesA 的答案。

    尚未尝试使用数组,但如果您对结果数组有疑问,请检查其 cmets 及其旁边的答案。 但由于.create() 只返回一个对象,它对我有用。无论如何,如果您使用.findAll(),则应使用{raw: true} 选项而不是此解决方案,因为它适用于该方法。

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

    非常感谢。

    【讨论】:

    • 为什么 Sequelize 不实现 {raw: true} 来创建?!
    猜你喜欢
    • 2014-12-01
    • 2021-12-13
    • 2021-07-27
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多