[英]Switch between associatons in Sequelize (One To Many and Many to Many at the same time)
我有表User
, Assignment
, FavoriteAssignment
。 User
可以创建多个Assignment
,只分配给他,即one to many
关联。 但是许多User
可以将许多Assignment
添加到他们的收藏夹中,即通过FavoriteAssignment
表many to many
关联。
如何包含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']
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.