gpt4 book ai didi

javascript - 在 Sequelize 中的关联之间切换(同时一对多和多对多)

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

我有 UserAssignmentFavoriteAssignment 表。 User 可以创建很多个 Assignment ,只分配给他,即 one to many 关联。
但是很多 User 可以添加很多 Assignment 到他们的收藏夹中,即通过 many to many 表进行 FavoriteAssignment 关联。
如何包含 User 的创建作业或他最喜欢的作业?我的意思是在使用 sequelize 进行包含时我应该如何在关联之间切换?
用户关联:

  class User extends Model {
static associate(models) {
User.hasMany(models.Assignment, { foreignKey: 'authorTelegramId'});
User.belongsToMany(models.Assignment, { through: 'FavoriteAssignments', foreignKey: 'telegramId'});
}
};
作业关联:
  class Assignment extends Model {
static associate(models) {
Assignment.belongsTo(models.User, {foreignKey: 'authorTelegramId'});
Assignment.belongsToMany(models.User, {through: 'FavoriteAssignments', foreignKey: 'assignmentId'});
}
};
FavoriteAssignment 的关联:
  class FavoriteAssignment extends Model {
static associate(models) {
FavoriteAssignment.belongsTo(models.User, {foreignKey: 'telegramId'});
FavoriteAssignment.belongsTo(models.Assignment, {foreignKey: 'assignmentId'});
}
};
我来到这个问题,因为当我这样做时:
const result = await db.User.findAll({
include: [{
model: db.Assignment
}]
});
它获取所有 User 最喜欢的赋值,因为 belongsToMany 是最后定义的!
如果我评论 User.belongsToMany(models.Assignment, { through: 'FavoriteAssignments', foreignKey: 'telegramId'}); 行,那么它将获取所有 User 的创建分配( one to many 关联)。
如果我有多个关联,我如何 选择 我想使用哪个关联?

最佳答案

基本上我必须这样命名关联:

  User.hasMany(models.Assignment, { foreignKey: 'authorTelegramId', as: 'assignments'});
User.belongsToMany(models.Assignment, { through: 'FavoriteAssignments', foreignKey: 'telegramId', as: 'favoriteAssignments'});
然后调用它:
const result = await db.User.findAll({
include: ['assignments']
});
const result1 = await db.User.findAll({
include: ['favoriteAssignments']
});

关于javascript - 在 Sequelize 中的关联之间切换(同时一对多和多对多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64858734/

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