【问题标题】:Switch between associatons in Sequelize (One To Many and Many to Many at the same time)在 Sequelize 中的关联之间切换(同时一对多和多对多)
【发布时间】:2020-11-16 22:05:43
【问题描述】:

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

如果我有多个关联,我如何选择要使用的关联?

【问题讨论】:

    标签: javascript postgresql sequelize.js many-to-many one-to-many


    【解决方案1】:

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

      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']
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 2016-12-09
      • 2014-04-15
      相关资源
      最近更新 更多