是否可以使用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)
]);
}
}
}
}
);
答案 0 :(得分:6)
看看这个Sequelize插件:
https://www.npmjs.com/package/sequelize-noupdate-attributes
它增加了对Sequelize模型中没有更新和只读属性的支持。
在您的特定情况下,您可以使用以下标志配置属性:
{
title: {
type: DataTypes.STRING,
allowNull: false,
unique : true,
noUpdate : true
}
}
如果为空,则允许title
属性的初始集,然后在设置之后阻止进一步修改。
免责声明:我是插件作者。