在Sequelize中急切加载belongsToMany关联的结果

时间:2016-08-24 11:13:10

标签: mysql node.js sequelize.js

我目前正在使用Sequelize构建数据库布局作为我的ORM。我有一个模型布局,包括用户和应用程序模型。 用户可以通过AppUsers表属于许多应用程序(即可以访问它们)。 应用程序属于用户。

我已经在App模型中实现了这个

classMethods: {
  associate: function (models) {
    App.belongsTo(models.User, {
      foreignKey: 'id',
      constraints: false,
      as: 'owner'
    });

    App.belongsToMany(models.User, {
      through: {
        model: models.AppUser,
        unique: true
      },
      foreignKey: 'app_id',
      otherKey: 'user_id',
      constraints: false
    });
  }
}

和像这样的用户模型

classMethods: {
  associate: function (models) {
    User.belongsToMany(models.App, {
      through: {
        model: models.AppUser,
        unique: true
      },
      foreignKey: 'user_id',
      otherKey: 'app_id',
      constraints: false,
      as: 'apps'
    });

    User.hasMany(models.App, {
      foreignKey: 'owner_id',
      constraints: false,
      scope: {
        owner_type: 'user'
      },
      as: 'ownApps'
    });
  }
}

现在我的实际问题: 我正在寻找一种方法来查询用户有权访问的应用程序(即user.getApps()),并且热切地加载所有者信息并将其包含在对该查询的响应中。

我在include:关联中使用scope:User.belongsToMany(models.App, …,但没有一个产生所需的结果。 有没有办法做到这一点,还是我需要编写自定义App.findAll()查询?谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明,答案很简单: 只需将include添加到关联的模型函数即可:

user.getApps({ include: [{ model: models.User, as: 'owner' }] })