SEQUELIZE: ownTo вызывается с чем-то, что не является подклассом Sequelize.Model

Я новичок в сиквелизе, и я пытаюсь ассиакировать две таблицы. Пользователи и проекты. Я определил модель для каждого из них под названием UserModel и ProjectModel, и когда я пытаюсь связать проекты с пользователем, у меня возникает эта ошибка:

ownTo вызывается с чем-то, что не является подклассом 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;
}

Что я делаю неправильно?


person José Carlos    schedule 03.06.2020    source источник


Ответы (1)


Наконец-то я нашел решение своей проблемы. В этой ассоциации, например:

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

С переменной models.UserModel я ссылался на переменную, возвращаемую моделью. Вместо этого вы должны написать имя таблицы. Итак, в моем случае правильная функция:

ProjectModel.associate = (models) => {
    ProjectModel.belongsTo(**models.users**, {
        foreignKey: "userID"
    });
}
person José Carlos    schedule 03.06.2020
comment
Это прекрасно работает! - person Victor Karangwa; 23.06.2021