Sequelize:即使通知了值,列也不能为空

时间:2016-12-15 16:08:51

标签: node.js sequelize.js

我在我的应用中进行了以下迁移:

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,
  });
}

我该如何解决?

1 个答案:

答案 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
},`

请注意,在迁移过程中,您还必须更新模型中所做的任何更改。