无法更新的 Sequelize 列
A Sequelize column that cannot be updated
是否可以使用 Sequelize 在 MySQL table 上创建一个可以在创建新行时初始化但永远不会更新的列?
例如,REST 服务允许用户更新他的个人资料。他可以更改除 id
以外的任何字段。我可以从 API 路由的请求中删除 id
,但这有点多余,因为有许多不同的模型表现相似。理想情况下,我希望能够在 Sequelize 中定义一个约束,以防止将 id
列设置为 DEFAULT
.
以外的任何内容
目前,我正在为 id
使用 setterMethod
来手动抛出 ValidationError
,但这看起来很老套,所以我想知道是否有更简洁的方法这个。更糟糕的是,这个实现仍然允许在创建新记录时设置 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 模型中添加了对无更新和只读属性的支持。
在您的特定情况下,您可以使用以下标志配置属性:
{
title: {
type: DataTypes.STRING,
allowNull: false,
unique : true,
noUpdate : true
}
}
这将允许 title
属性的初始设置(如果为 null),然后在设置完成后阻止任何进一步的修改。
免责声明:我是插件作者。
是否可以使用 Sequelize 在 MySQL table 上创建一个可以在创建新行时初始化但永远不会更新的列?
例如,REST 服务允许用户更新他的个人资料。他可以更改除 id
以外的任何字段。我可以从 API 路由的请求中删除 id
,但这有点多余,因为有许多不同的模型表现相似。理想情况下,我希望能够在 Sequelize 中定义一个约束,以防止将 id
列设置为 DEFAULT
.
目前,我正在为 id
使用 setterMethod
来手动抛出 ValidationError
,但这看起来很老套,所以我想知道是否有更简洁的方法这个。更糟糕的是,这个实现仍然允许在创建新记录时设置 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 模型中添加了对无更新和只读属性的支持。
在您的特定情况下,您可以使用以下标志配置属性:
{
title: {
type: DataTypes.STRING,
allowNull: false,
unique : true,
noUpdate : true
}
}
这将允许 title
属性的初始设置(如果为 null),然后在设置完成后阻止任何进一步的修改。
免责声明:我是插件作者。