【问题标题】:omitNull not working on primaryKey column in SequelizeomitNull 不适用于 Sequelize 中的 primaryKey 列
【发布时间】:2019-02-10 13:22:20
【问题描述】:

我有一个带有表的 SQL 服务器数据库,该表在添加记录时自动在每一行中插入一个 guid。此列是表的主键,不需要为其提供值,因为它是自动的。

问题在于,每次我执行 .create({emailAddress:"test@test.com"}) 调用时,Sequelize 都会为此列发送 NULL,这会导致数据库出现错误(因为不允许使用空值) ,显然)。

我尝试在顶层和“调用”级别添加 omitNull,但它们都不起作用,除非我删除主键然后它不发送 NULL。因此,Sequelize 似乎认为如果某物是主键,那么它必须发送一个值,而不了解 SQL SERVER 数据库将处理该值的插入。

有人知道解决方法吗?

// 型号

module.exports = function (sequelize, DataTypes) {

    const Player = sequelize.define('Player', {
        playerId: {
            primaryKey: true,
            type: DataTypes.STRING
        },
        emailAddress: {
            type: DataTypes.STRING 
        }
    }, {
        timestamps: false
    });

    return Player;

};

// 创建一行

let newPlayer = {
    emailAddress:'test@test.com'
}

Player.create(newPlayer, {omitNull:true}).then(function(player){
    console.log("player", player)
}).catch(function(error){
    console.log("error", error)
})

【问题讨论】:

    标签: sql-server node.js sequelize.js


    【解决方案1】:

    添加 defaultValueallowNull 应该可以完成这项工作

    playerId: {
      primaryKey: true,
      defaultValue: '',
      allowNull: false,
    }
    

    【讨论】:

    • OK,这样将发送一个空字符串,该字符串将替换为数据库中的 GUID,这将作为一种解决方法完美运行。没有办法让它什么都不发送似乎仍然很奇怪,但这只是我很挑剔。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多