使用Sequelize在模型中的ForeignKey关联1:1中添加allowNull问题

时间:2019-04-11 20:56:15

标签: javascript mysql node.js sequelize.js

我正在使用带有MySQL数据库的Sequelize使用node.js做一个简单的项目。我正在为模型关联建模。一个拥有hasMany,另一个拥有hastoTo,我在两者中都设置了信息(例如as:...,foreignKey:...,onDelete:...),并在foreignKey中设置了属性allowNull。当我使用belongsTo方法保存模型时,在请求主体中传递foreignKey时,它将正确保存。但是,当我使用结合使用方法hasOne的模型来执行此操作时,它不起作用。它通过了,我需要指定使用belongsTo方法的模型ID。

const connection = require('../../config/database');
const DataTypes = require('sequelize').DataTypes;

const Course = connection.define('course', {
    id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    courseName: {
        type: DataTypes.STRING(50),
        field: 'course_name',
        allowNull: false
    }
},
    { timestamps: false });
Course.associate = models => {
    Course.belongsTo(models.Lecturer, {
        foreignKey: {
            field: 'lecturer_id',
            allowNull: false
        },
        as: 'lecturer'
    });
    Course.belongsToMany(models.Student, {
        through: 'student_course',
        as: 'students',
        foreignKey: 'curse_id',
        otherKey: 'student_id'
    })
}

module.exports = Course;

const connection = require('../../config/database');
const DataTypes = require('sequelize').DataTypes;

const Lecturer = connection.define('lecturer', {
    lecturerName: {
        type: DataTypes.STRING(50),
        field: 'lecturer_name',
        allowNull: false
    }
},
    { timestamps: false });
Lecturer.associate = models => {
    Lecturer.hasOne(models.Course, {
        foreignKey: {
            field: 'lecturer_id',
            allowNull: false
        },
        as: 'course'
    })
}

module.exports = Lecturer;

结果: [ValidationErrorItem {        消息:“ course.courseId不能为空”,        类型:“ notNull Violation”,        路径:“ courseId”,        值:null,        来源:“ CORE”,        实例:[对象],        validateatorKey:'is_null',        validatorName:null,        validateatorArgs:[]}]

1 个答案:

答案 0 :(得分:0)

我无法发表评论,但看起来错误显示了驼峰式列名(courseId)而不是蛇形列名(course_id)。

此外,您在Course.belongsToMany关联中拼写了“ course_id”。