SEQUELIZE:使用非Sequelize.Model

时间:2020-06-03 09:58:45

标签: node.js sequelize.js

我是sequelize的新手,并且我想协助两个表。用户和项目。我为每个模型定义了一个名为UserModel和ProjectModel的模型,当我尝试将项目与用户关联时,出现此错误:

belongsTo所调用的不是其子类的 Sequelize.Model

这些是我定义每个模型的文件:

user.js

module.exports = (sequelize, DataType) => {
    const UserModel = sequelize.define("user", {
        id: {
            type: DataType.INTEGER,
            primaryKey: true,
            autoIncrement: true,
            allowNull: false,
        },
        email: {
            type: DataType.STRING,
            allowNull: false,
            isEmail: {
                msg: "The format of the e-mail is not correct"
            },
            validate: {
                notNull: {
                    msg: "E-mail cannot be empty"
                }
            }
        },
        name: {
            type: DataType.STRING,
            is: /^[a-zA-Z ]+$/i,
            allowNull: false,
            validate: {
                notNull: {
                    msg: "Name cannot be empty"
                }
            }
        },
        surname: {
            type: DataType.STRING,
            is: /^[a-zA-Z ]+$/i,
            allowNull: false,
            validate: {
                notNull: {
                    msg: "Surname cannot be empty"
                }
            }
        }
    });
    UserModel.associate = (models) => {
        UserModel.hasMany(models.ProjectModel, {
            foreignKey: "userID"
        })
    }

    return UserModel;    
};

project.js

module.exports = (sequelize, DataType) => {
    const ProjectModel =  sequelize.define("project", {
        id: {
            type: DataType.INTEGER,
            primaryKey: true,
            autoIncrement: true,
            allowNull: false,
        },
        name: {
            type: DataType.STRING,
            is: /^[a-zA-Z ]+$/i,
            allowNull: false,
            validate: {
                notNull: {
                    msg: "Name cannot be empty"
                }
            }
        },
        body: {
            type: DataType.TEXT,
            allowNull: false,
            validate: {
                notNull: {
                    msg: "Body cannot be empty"
                }
            }
        },
        status: {
            type: DataType.ENUM("active", "inactive", "declined", "completed"),
            allowNull: false,
            validate: {
                notNull: {
                    msg: "Status cannot be empty"
                }
            }
        },
        userID: {
            type: DataType.INTEGER,
            allowNull: false,
            validate: {
                notNull: {
                    msg: "userID cannot be empty"
                }
            },
            references: {
                model: UserModel,
                key: "id"
            }            
        }
    }); 
    ProjectModel.associate = (models) => {
        ProjectModel.belongsTo(models.UserModel, {
            foreignKey: "userID"
        });
    }

    ProjectModel.belongsTo(UserModel, {
        foreignKey: "userID"
    });


    return ProjectModel;
}

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决问题的方法。在这种关联中,例如:

ProjectModel.associate = (models) => {
    ProjectModel.belongsTo(models.UserModel, {
        foreignKey: "userID"
    });
}

使用变量models.UserModel,我正在引用模型返回的变量。取而代之的是,您必须编写表的名称。因此,对于我来说,正确的功能是:

ProjectModel.associate = (models) => {
    ProjectModel.belongsTo(**models.users**, {
        foreignKey: "userID"
    });
}