是否可以使用 Sequelize 在 MySQL 表上创建一个列,该列在创建新行时可以初始化,但永远不会更新?
Is it possible to create a column on a MySQL table using Sequelize that can be initialized when creating a new row, but never updated?
例如,REST 服务允许用户更新其个人资料.他可以更改除id 以外的任何字段.我可以从 API 路由上的请求中去除 id ,但这有点多余,因为有许多不同的模型表现相似.理想情况下,我希望能够在 Sequelize 中定义一个约束,以防止将 id 列设置为 DEFAULT 以外的任何内容.
For example, a REST service allows a user to update his profile. He can change any field except his id. I can strip the id from the request on the API route, but that's a little redundant because there are a number of different models that behave similarly. Ideally, I'd like to be able to define a constraint in Sequelize that prevents the id column from being set to anything other than DEFAULT.
目前,我正在使用 setterMethod 作为 id 来手动抛出 ValidationError,但这似乎是 hackish,所以我想知道如果有更干净的方法来做到这一点.更糟糕的是,这个实现仍然允许在创建新记录时设置 id,但我不知道如何解决这个问题,因为当 Sequelize 生成它调用 setterMethods.id 的查询时 将值设置为 DEFAULT.
Currently, I'm using a setterMethod for the id to manually throw a ValidationError, but this seems hackish, so I was wondering if there's a cleaner way of doing this. Even worse is that this implementation still allows the id to be set when creating a new record, but I don't know a way around this as when Sequelize generates the query it calls setterMethods.id to set the value to 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 插件:
Look at this Sequelize plugin:
https://www.npmjs.com/package/sequelize-noupdate-attributes
它增加了对 Sequelize 模型中无更新和只读属性的支持.
It adds support for no update and read-only attributes in Sequelize models.
在您的特定情况下,您可以使用以下标志配置属性:
In your specific case, you could configure the attribute with the following flags:
{
title: {
type: DataTypes.STRING,
allowNull: false,
unique : true,
noUpdate : true
}
}
这将允许 title 属性的初始设置为空,然后一旦设置就阻止任何进一步的修改.
That will allow the initial set of the title attribute if is null, and then prevent any further modifications once is already set.
免责声明:我是插件作者.
这篇关于无法更新的 Sequelize 列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
如何有效地使用窗口函数根据 N 个先前值来决定How to use windowing functions efficiently to decide next N number of rows based on N number of previous values(如何有效地使用窗口函数根据
在“GROUP BY"中重用选择表达式的结果;条款reuse the result of a select expression in the quot;GROUP BYquot; clause?(在“GROUP BY中重用选择表达式的结果;条款?)
Pyspark DataFrameWriter jdbc 函数的 ignore 选项是忽略整Does ignore option of Pyspark DataFrameWriter jdbc function ignore entire transaction or just offending rows?(Pyspark DataFrameWriter jdbc 函数的 ig
使用 INSERT INTO table ON DUPLICATE KEY 时出错,使用 Error while using INSERT INTO table ON DUPLICATE KEY, using a for loop array(使用 INSERT INTO table ON DUPLICATE KEY 时出错,使用 for 循环数组
pyspark mysql jdbc load 调用 o23.load 时发生错误 没有合pyspark mysql jdbc load An error occurred while calling o23.load No suitable driver(pyspark mysql jdbc load 调用 o23.load 时发生错误 没有合适的
如何将 Apache Spark 与 MySQL 集成以将数据库表作为How to integrate Apache Spark with MySQL for reading database tables as a spark dataframe?(如何将 Apache Spark 与 MySQL 集成以将数据库表作为