【问题标题】:A Sequelize column that cannot be updated无法更新的 Sequelize 列
【发布时间】:2016-08-23 22:42:28
【问题描述】:

是否可以使用 Sequelize 在 MySQL 表上创建可以在创建新行时初始化但永远不会更新的列?

例如,REST 服务允许用户更新他的个人资料。他可以更改除id 之外的任何字段。我可以从 API 路由上的请求中去除id,但这有点多余,因为有许多不同的模型表现相似。理想情况下,我希望能够在 Sequelize 中定义一个约束,以防止将 id 列设置为 DEFAULT 以外的任何内容。

目前,我正在使用setterMethodid 手动抛出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)
                    ]);
                }
            }
        }
    }
);

【问题讨论】:

标签: mysql node.js api rest sequelize.js


【解决方案1】:

看看这个 Sequelize 插件:

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

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

在您的特定情况下,您可以使用以下标志配置属性:

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

这将允许title 属性的初始设置为空,然后在已经设置后阻止任何进一步的修改。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2016-12-04
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多