是否可以使用迁移文件更改列的“验证”元数据?我尝试了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
}
})
有什么想法吗?
答案 0 :(得分:4)
验证在客户端上进行,而不是在数据库上进行。您不需要迁移它。
答案 1 :(得分:0)
我几次遇到这个问题,试图理解通过验证构建模型与使用迁移之间的区别。 我发现此链接非常有帮助。希望将来有人这样做。
验证与约束之间的差异
验证是在Sequelize级别中纯粹执行的检查 JavaScript。如果您提供自定义,它们可能会非常复杂 验证器功能,或者可以是提供的内置验证器之一 通过Sequelize。如果验证失败,则不会将任何SQL查询发送到 数据库。
另一方面,约束是在SQL级别定义的规则。的 约束的最基本示例是唯一约束。如果一个 约束检查失败,数据库将引发错误,并且 Sequelize会将此错误转发给JavaScript(在此示例中, 引发SequelizeUniqueConstraintError)。请注意,在这种情况下, 与验证不同,执行了SQL查询。
https://sequelize.org/master/manual/validations-and-constraints.html