求Sequelize忽略未定义属性的官方文档或相关资料
Sequelize 的 create/update 方法是否会忽略传入的额外属性?
核心结论
默认情况下,Sequelize 在执行create或update操作时,只会处理模型中显式定义的字段,传入的额外属性会被自动过滤,不会被包含在生成的SQL语句中,因此不会触发数据库字段不存在的错误。你提供的代码示例中unknownField被忽略的行为,完全符合这一默认逻辑。
官方文档中的对应说明
Model.create() 逻辑
Sequelize 官方文档明确说明,create方法接收的数据对象中,只有与模型字段匹配的键值对会被用于生成INSERT语句,未定义的属性会被直接忽略。Model.update() 逻辑
update方法遵循相同的过滤规则:生成的UPDATE语句仅包含模型中已定义的字段,额外属性不会被传递到数据库层面。纠正错误认知
ChatGPT提到的"为额外字段设置allowNull或defaultValue"属于误解——allowNull和defaultValue是针对已定义模型字段的配置项,用于控制字段是否允许为空、默认值是什么,和额外属性的过滤逻辑毫无关系。额外属性无论是否设置这些选项,都会被默认过滤。
补充:如何禁用属性过滤
如果业务需要允许传递模型未定义的字段(比如数据库存在动态扩展字段),可以通过以下方式调整:
- 在模型配置中设置
strict: false(适用于Sequelize v6及以上版本),关闭默认的属性白名单过滤 - 使用
raw: true选项执行操作(但此选项会返回原始数据库结果,不会实例化为模型对象)
内容的提问来源于stack exchange,提问作者duduwe
相关产品推荐
相关产品推荐

