gpt4 book ai didi

sequelize.js - 如何在不禁用约束的情况下修复找到的循环依赖?

转载 作者:行者123 更新时间:2023-12-03 22:33:29 26 4
gpt4 key购买 nike

我正在为我的游戏开发一个数据库,这就是我设计用于存储哪个角色拥有哪个项目的数据库的方式。
型号:
人物模型:

sequelize.define('characters', {
id: {
type: DataTypes.STRING,
primaryKey: true
}
primary_slot: {
type: DataTypes.INTEGER
},
secondary_slot: {
type: DataTypes.INTEGER
},
armor_slot: {
type: DataTypes.INTEGER
}
}, {
freezeTableName: true
});
物品型号:
sequelize.define('items', {
id: {
type: DataTypes.STRING,
primaryKey: true
},
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
damage: {
type: DataTypes.INTEGER,
defaultValue: 0
}
}, {
freezeTableName: true,
timestamps: false
});
CharactersItems 模型之间的关系是通过 item_ownerships 表的多对多关系:
Characters.belongsToMany(models.items, {
through: 'item_ownerships',
foreignKey: 'owner_id',
otherKey: 'item_id'
});

Items.belongsToMany(models.characters, {
through: 'item_ownerships',
foreignKey: 'item_id',
otherKey: 'owner_id'
});
Item_ownerships 模型:
sequelize.define('item_ownerships', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false
},
owner_id: {
type: DataTypes.STRING
},
item_id: {
type: DataTypes.INTEGER
},
durability: {
type: DataTypes.INTEGER
},
status: {
type: DataTypes.STRING,
allowNull: false
}
}
如下所示,我在 id 表中添加了一个额外的 item_ownerships 列,因为我希望该表中的每个条目都有一个唯一的 ID 作为主键,而不是主键是 owner_iditem_id 2 个外键的复合键.
现在我的问题来了,我想定义以下关联:
Item_ownerships.hasOne(models.characters, {
foreignKey: 'primary_slot'
});

Item_ownerships.hasOne(models.characters, {
foreignKey: 'secondary_slot'
});

Item_ownerships.hasOne(models.characters, {
foreignKey: 'armor_slot'
});


Characters.belongsTo(models.item_ownerships, {
foreignKey: 'primary_slot'
});
Characters.belongsTo(models.item_ownerships, {
foreignKey: 'secondary_slot'
});
Characters.belongsTo(models.item_ownerships, {
foreignKey: 'armor_slot'
});
意思是,我希望字符的 primary_slot 列保存 item_ownerships 表中项目所有权的 ID(外键)。
我得到的错误如下: Sequelize: Cyclic dependency found. Dependency chain: characters -> item_ownerships => characters添加 constraints: false 不是这里的操作过程,因为那时我没有外键约束。我希望角色只能对他们在 equip 表中拥有的项目进行 item_ownerships
编辑:修正错别字

最佳答案

您应该为相同模型之间的所有关联添加别名,以便 Sequelize 将它们彼此区分:

Items.hasOne(models.md_characters, {
foreignKey: 'primary_slot',
as: 'PrimarySlot'
});

Items.hasOne(models.md_characters, {
foreignKey: 'secondary_slot',
as: 'SecondarySlot'
});

Items.hasOne(models.md_characters, {
foreignKey: 'armor_slot',
as: 'ArmorSlot'
});

MD_characters.belongsTo(models.item_ownerships, {
foreignKey: 'primary_slot',
as: 'PrimaryOwnership'
});
MD_characters.belongsTo(models.item_ownerships, {
foreignKey: 'secondary_slot',
as: 'SecondaryOwnership'
});
MD_characters.belongsTo(models.item_ownerships, {
foreignKey: 'armor_slot',
as: 'ArmorOwnership'
});

关于sequelize.js - 如何在不禁用约束的情况下修复找到的循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64432414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com