Sequelize列无法更新

时间:2015-04-07 18:53:08

标签: mysql node.js api rest sequelize.js

是否可以使用Sequelize在MySQL表上创建一个列,可以在创建新行时初始化,但从不更新?

例如,REST服务允许用户更新其个人资料。他可以更改除id以外的任何字段。我可以从API路由上的请求中删除id,但这有点多余,因为有许多不同的模型行为相似。理想情况下,我希望能够在Sequelize中定义一个约束,阻止id列设置为DEFAULT以外的任何其他内容。

目前,我正在setterMethod使用id来手动抛出ValidationError,但这似乎是个hackish,所以我想知道是否有更清洁的方法。更糟糕的是,这个实现仍然允许在创建新记录时设置id,但我不知道如何解决这个问题,因为当Sequelize生成它调用setterMethods.id的查询来设置值时到DEFAULT

return sequelize.define('Foo',
    {
        title: {
            type: DataTypes.STRING,
            allowNull: false,
            unique: true,
            validate: {
                notEmpty: true
            }
        }
    },
    {
        setterMethods: {
            id: function (value) {
                if (!this.isNewRecord) {
                    throw new sequelize.ValidationError(null, [
                        new sequelize.ValidationErrorItem('readonly', 'id may not be set', 'id', value)
                    ]);
                }
            }
        }
    }
);

1 个答案:

答案 0 :(得分:6)

看看这个Sequelize插件:

https://www.npmjs.com/package/sequelize-noupdate-attributes

它增加了对Sequelize模型中没有更新和只读属性的支持。

在您的特定情况下,您可以使用以下标志配置属性:

{
  title: {
    type: DataTypes.STRING,
    allowNull: false,
    unique   : true,
    noUpdate : true
  }
}

如果为空,则允许title属性的初始集,然后在设置之后阻止进一步修改。

免责声明:我是插件作者。