Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 无法更新的Sequelize列_Mysql_Node.js_Api_Rest_Sequelize.js - Fatal编程技术网

Mysql 无法更新的Sequelize列

Mysql 无法更新的Sequelize列,mysql,node.js,api,rest,sequelize.js,Mysql,Node.js,Api,Rest,Sequelize.js,是否可以使用Sequelize在MySQL表上创建一列,该列可以在创建新行时初始化,但从不更新 例如,REST服务允许用户更新其配置文件。他可以更改其id以外的任何字段。我可以从API路由上的请求中去掉id,但这有点多余,因为有许多不同的模型行为类似。理想情况下,我希望能够在Sequelize中定义一个约束,以防止id列被设置为DEFAULT之外的任何内容 return sequelize.define('Foo', { title: { type

是否可以使用Sequelize在MySQL表上创建一列,该列可以在创建新行时初始化,但从不更新

例如,REST服务允许用户更新其配置文件。他可以更改其
id
以外的任何字段。我可以从API路由上的请求中去掉
id
,但这有点多余,因为有许多不同的模型行为类似。理想情况下,我希望能够在Sequelize中定义一个约束,以防止
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)
                    ]);
                }
            }
        }
    }
);
目前,我正在使用
setterMethod
id
手动抛出
ValidationError
,但这似乎有点不太妥当,所以我想知道是否有更干净的方法来实现这一点。更糟糕的是,这个实现仍然允许在创建新记录时设置
id
,但我不知道如何解决这个问题,因为Sequelize生成它调用的查询
setterMethods.id
将值设置为
默认值

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插件:

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

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

{
  title: {
    type: DataTypes.STRING,
    allowNull: false,
    unique   : true,
    noUpdate : true
  }
}
这将允许
title
属性的初始设置为null,然后在已经设置之后阻止任何进一步的修改

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

只是想知道同样的问题。