Sequelize:更改“验证”列的元数据

时间:2016-10-02 00:17:55

标签: javascript migration sequelize.js database-migration database-table

是否可以使用迁移文件更改列的“验证”元数据?我尝试了queryInterface.changeColumn方法,看起来它只能更改文档中提到的三个元数据(defaultValue,allowNull和type)。

我已尝试在迁移文件的“向上”对象中执行此类操作:

queryInterface.changeColumn(
  'tableName',
  'columnName',
  {
    validate: {
      is: /new_regex_validation/
    }
  }
)

但是,当我运行“sequelize db:migrate”

时,上述尝试对我不起作用

为简单起见,我将使用表格定义来详细说明我的问题:

我正在尝试更改已存在的表格,如下所示:

var tableName = sequelize.define('tableName', {
    columnName: {
        type: DataTypes.STRING,
        unique: true,
        allowNull: false,
        validate: {
            is: /some_regex_validation/
        }
    }
})

使用续集迁移:

var tableName = sequelize.define('tableName', {
    columnName: {
        type: DataTypes.STRING,
        unique: true,
        allowNull: false,
        validate: {
            is: /a_new-or-different_regex_validation/
        }
    }
})

只需在使用续集迁移时删除验证元数据:

var tableName = sequelize.define('tableName', {
    columnName: {
        type: DataTypes.STRING,
        unique: true,
        allowNull: false
    }
})

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

验证在客户端上进行,而不是在数据库上进行。您不需要迁移它。

答案 1 :(得分:0)

我几次遇到这个问题,试图理解通过验证构建模型与使用迁移之间的区别。 我发现此链接非常有帮助。希望将来有人这样做。

验证与约束之间的差异

验证是在Sequelize级别中纯粹执行的检查 JavaScript。如果您提供自定义,它们可能会非常复杂 验证器功能,或者可以是提供的内置验证器之一 通过Sequelize。如果验证失败,则不会将任何SQL查询发送到 数据库。

另一方面,约束是在SQL级别定义的规则。的 约束的最基本示例是唯一约束。如果一个 约束检查失败,数据库将引发错误,并且 Sequelize会将此错误转发给JavaScript(在此示例中, 引发SequelizeUniqueConstraintError)。请注意,在这种情况下, 与验证不同,执行了SQL查询。

https://sequelize.org/master/manual/validations-and-constraints.html