无法更新的Sequelize列
是否有可能使用Sequelize在MySQL表上创build一个列,可以在创build新行时初始化,但从未更新?
例如,REST服务允许用户更新他的个人资料。 他可以改变任何领域,除了他的id
。 我可以从APIpath上的请求中id
,但这有点多余,因为有许多不同的模型行为相似。 理想情况下,我希望能够在Sequelize中定义一个约束,以防止将id
列设置为DEFAULT
以外的任何其他值。
目前,我使用id
的setterMethod
手动抛出一个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,然后防止一旦已经设置了任何进一步的修改。
免责声明:我是插件作者。