无法更新的Sequelize列

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

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

目前,我使用idsetterMethod手动抛出一个ValidationError ,但这似乎是hackish,所以我想知道是否有一个更干净的方式做到这一点。 更糟糕的是,这个实现仍然允许在创build新logging时设置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) ]); } } } } ); 

看看这个Sequelize插件:

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

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

在您的具体情况下,您可以使用以下标志configuration属性:

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

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

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