繁体   English   中英

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

[英]Switch between associatons in Sequelize (One To Many and Many to Many at the same time)

我有表UserAssignmentFavoriteAssignment User可以创建多个Assignment ,只分配给他,即one to many关联。 但是许多User可以将许多Assignment添加到他们的收藏夹中,即通过FavoriteAssignmentmany 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.

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