Sequelize列无法更新

M M*_*ler 9 mysql api rest node.js sequelize.js

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

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

目前,我使用setterMethodid手动抛出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)
                    ]);
                }
            }
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

dio*_*ney 9

看看这个Sequelize插件:

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

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

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

{
  title: {
    type: DataTypes.STRING,
    allowNull: false,
    unique   : true,
    noUpdate : true
  }
}
Run Code Online (Sandbox Code Playgroud)

这将允许title属性的初始集合if为null,然后一旦已经设置就阻止任何进一步的修改.

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