我在我的应用中进行了以下迁移:
module.exports = {
up(queryInterface, Sequelize) {
return queryInterface.createTable(
'question_options',
{
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
question_id: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'questions',
key: 'id',
},
onDelete: 'cascade',
},
option_id: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'options',
key: 'id',
},
onDelete: 'cascade',
},
}
);
},
down(queryInterface) {
return queryInterface.dropTable('question_options');
},
};
以及相应的模型:
module.exports = (sequelize, DataTypes) => {
const QuestionOption = sequelize.define('QuestionOption', {
questionId: {
type: DataTypes.INTEGER,
allowNull: false,
field: 'question_id',
},
optionId: {
type: DataTypes.INTEGER,
allowNull: false,
field: 'option_id',
},
}, {
tableName: 'question_options',
timestamps: false,
underscored: true,
createAssociations: (models) => {
QuestionOption.belongsTo(models.Option, {
foreignKey: 'option_id',
});
QuestionOption.belongsTo(models.Question, {
foreignKey: 'question_id',
});
},
});
return QuestionOption;
};
当我尝试在数据库中创建对象时,出现以下错误:
SequelizeDatabaseError: ER_BAD_NULL_ERROR: Column 'question_id' cannot be null
sql: 'INSERT INTO `question_options` (`question_id`,`option_id`) VALUES (NULL,1);' },
这是代码:
function createQuestionOptions() {
return models.QuestionOption.create({
optionId: objects.option.id,
questionId: objects.question.id,
});
}
我能使它工作的唯一方法是同时使用蛇案例和驼峰案例属性名称:
function createQuestionOptions() {
return models.QuestionOption.create({
optionId: objects.option.id,
option_id: objects.option.id,
questionId: objects.question.id,
question_id: objects.question.id,
});
}
我该如何解决?
答案 0 :(得分:0)
在模型定义中,您将question_id
定义为
`questionId: {
type: DataTypes.INTEGER,
allowNull: false,
field: 'question_id',
},`},
allowNull:false
将不允许您像在SQL查询中一样将null
值传递给该字段。
要解决该错误,您需要将一个实值传递给sql查询中的“ question_id”字段。 或者,您可以为该字段设置默认值
`questionId: {
type: DataTypes.INTEGER,
allowNull: false,
field: 'question_id',
defaultValue: 2
},`
请注意,在迁移过程中,您还必须更新模型中所做的任何更改。