NodeJS 如何在Sequelize中删除Constraint defaultValue

tvz2xvvm  于 2023-06-22  发布在  Node.js
关注(0)|答案(3)|浏览(121)

我尝试在Sequelize中编写迁移,并希望删除defaultValue约束。正确的语法是什么?我尝试了以下两种方法:

return queryInterface.removeConstraint('Table', 'table_columnName_default')
return queryInterface.removeConstraint('Table', 'columnName_default')
zqdjd7g9

zqdjd7g91#

你能试着用

return queryInterface.changeColumn('Table', 'attributeName', {
    defaultValue: null,
    allowNull: true,
});

http://docs.sequelizejs.com/class/lib/query-interface.js~QueryInterface.html#instance-method-changeColumn

xxb16uws

xxb16uws2#

您也可以使用原始查询:

return queryInterface.sequelize.query(`ALTER TABLE table ALTER COLUMN column DROP DEFAULT;`)
ki0zmccv

ki0zmccv3#

你应该知道数据类型。例如STRING

const { DataTypes } = require('sequelize');

return queryInterface.changeColumn('Table', 'attributeName', {
    defaultValue: null,
    type: DataTypes.STRING
});

你也可以从model定义中使用queryInterface(或者传递模型/查询接口),使其对于任何具有默认值的列都是通用的:

function dropDefaults(queryInterface, model) {
  const defaultValues = Object.keys(model._defaultValues);
  for (const column of defaultValues) {
    model.queryInterface.changeColumn(model.tableName, column, {
      defaultValue: null,
      type: model.fieldRawAttributesMap[column].type,
    });
  }
}

相关问题