繁体   English   中英

${this.name}.hasMany 调用的不是 Sequelize.Model 的子类

[英]${this.name}.hasMany called with something that's not a subclass of Sequelize.Model

我正在尝试按照 sequelize 文档创建角色和用户之间的关联(角色有很多用户)。 值得一提的是,我没有使用define方法来创建我的模型,而是使用init ,就像这里提到的一样。 话虽如此,我无法创建此关联。

这是用户 model:

const { DataTypes, Model } = require('sequelize');
const sequelize = require('../database/connection');
const bcryptjs = require('bcryptjs');
const Role = require('./role')
const _ = require('lodash')
const Demande = require('./demande')

class User extends Model {

    getOwnerId (){
        return this.idUser
    }
}

User.init({
    idUser: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true,
    },
    email: {
        type: DataTypes.STRING,
        unique: true,
        allowNull: false,
        validate: {
            isEmail: {
                msg: "Email non valid"
            }
        },
    },
    password: {
        type: DataTypes.STRING,
        allowNull: false,
        validate: {
            passwordValidator(value) {
                if (!(/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/).test(value))
                    throw new Error("Le mot de passe doit contenir au moins 8 caractères numériques et alphabétiques")
            }
        },
    },
    changedPassword: {
        type: DataTypes.DATE,
        allowNull: true,
    },
    nom: {
        type: DataTypes.STRING,
        notEmpty: true,
        allowNull: true,
    },
    prenom: {
        type: DataTypes.STRING,
        notEmpty: true,
        allowNull: true,
    },
    dateNaissance: {
        type: DataTypes.DATEONLY,
        allowNull: true,
    },
    wilayaNaissance: {
        type: DataTypes.INTEGER,
        allowNull: true,
        validate: {
            min: 1,
            max: 58,
        },
    },
    sexe: {
        type: DataTypes.STRING,
        allowNull: true,
        notEmpty: true,
        validate: {
            notEmpty: true,
            isIn: {
                args: [['homme', 'femme']],
                msg: 'Le sexe doit être homme ou femme'
            }
        }
    },
    telephone: {
        type: DataTypes.STRING,
        allowNull: true,
        validate: {
            notEmpty: true,
            telephoneValidator(value) {
                if (value == null || !(/^\+*[0-9]+/).test(value)) {
                    throw new Error("Format telephone invalide")
                }
            }
        }
    },
    adress: {
        type: DataTypes.STRING,
        allowNull: true,
    },
    completedSignUp: {
        type: DataTypes.BOOLEAN,
        allowNull: false,
        defaultValue: false,
    },
},
    {
        tableName: 'users',
        sequelize,
        modelName: 'User',
    }
)

User.hasMany(Demande, { foreignKey: "idUser" })
User.belongsTo(Role, {sourceKey: "idRole", sourceKey: "idRole"})


module.exports = User

这里是角色model:

const { DataTypes, Model } = require('sequelize');
const sequelize = require('../database/connection');
const User = require('./user')

class Role extends Model {}

Role.init({
    idRole: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true,
    },
    nomRole: {
        type: DataTypes.STRING,
        notEmpty: true,
        allowNull: false,
    },
    descriptionRole: {
        type: DataTypes.STRING,
        allowNull: true,
    },
}, {
    tableName: 'roles',
    sequelize,
    modelName: 'Role',
})
Role.hasMany(User, { foreignKey: "idRole", sourceKey: "idRole" })

module.exports = Role

和连接文件

const { Sequelize } = require('sequelize');
require('dotenv').config()

const sequelize = new Sequelize(
  process.env.DB_NAME,
  process.env.DB_USERNAME,
  process.env.DB_PASSWORD, {
  host: process.env.DB_HOST,
  dialect: process.env.DB_DIALECT
});

sequelize.authenticate()
  .then(() => {
    console.log('Connection has been established successfully.');
  }).catch(e => {
    console.error('Unable to connect to the database:', e);
  })

module.exports = sequelize
module.exports = sequelize

这个答案在这里为我解决了,我在 initialize.js 中导入了所有需要的模型,我在 index.js 中需要后者

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM