找到循环依赖项

问题描述 投票:0回答:1

当我尝试同步数据库时出现此奇怪的错误:

Unhandled rejection Error: Cyclic dependency found. roles is dependent of itself.
Dependency chain: roles -> users => roles

我有以下这种称为权限的连接表模型

const Permission = db.define('permission', {
    id: {
        type: type.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    role_id: {
        type: type.INTEGER,
        references: {
            model: 'roles',
            key: 'id',
        }
    },
    resource_id: {
        type: type.INTEGER,
        references: {
            model: 'resources',
            key: 'id',
        }
    },
});

为什么会发生此错误?我该如何解决?在我的用户模型中,用户具有一个角色:

const User = db.define('user', {
    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    role_id : {
        type: Sequelize.INTEGER,
        references: {
            model: 'roles',
            key: 'id',
        }
    }
});

User.hasOne(Role)

编辑:这是我的榜样:

const Role = db.define('role', {
    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    name: Sequelize.STRING,
})

module.exports = Role
javascript node.js sequelize.js
1个回答
0
投票

在续集文档中说:

A.hasOne(B)关联意味着一对一关系在A和B之间存在,外键在目标模型(B)

这意味着,用户模型不应具有角色模型的外键。尝试将您的用户模型更改为:

const User = db.define('user', {
    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
    }

});

User.hasOne(Role)

然后是您的榜样:

const Role = db.define('role', {
    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    name: Sequelize.STRING,
    user_id : {
        type: Sequelize.INTEGER,
        references: {
            model: 'users',
            key: 'id',
        }
    }
 })

Role.belongsTo(User);    

module.exports = Role
© www.soinside.com 2019 - 2024. All rights reserved.