当我使用 belongsToMany 关联时在 Sequelize 中自动预加载

Automatic Eager Loading in Sequelize when I am using belongsToMany assocation

好的,考虑一下。我的数据库中有 2 个实体 - GroupsUsers。所以它们之间存在关系-

  1. 一个用户可以是多个组的成员,一个组可以有多个成员(多对多)
  2. 一个管理员(用户)可以是多个组的管理员,一个组可以有多个管理员(多对多)

代码如下-

// Groups and Users (Admins) MANY-TO-MANY
User.belongsToMany(Groups, {through: "admins", as: "AdminGroups"});
Groups.belongsToMany(User, {through: 'admins', as: "Admins"});

// Groups and Users (Members) MANY-TO-MANY
User.belongsToMany(Groups, {through: 'members', as: "MemberGroups"});
Groups.belongsToMany(User, {through: 'members', as: "Members"});

现在我正在尝试使用 -

获取一个特定组的管理员

const admins = await group.getAdmins({
      attributes: ['id', 'firstname', 'lastname'],
    });

哪个有效并给我以下输出-

[
    {
        "id": 1,
        "firstname": "Jon",
        "lastname": "Doe",
        "admins": {
            "createdAt": "2021-01-21T18:53:45.791Z",
            "updatedAt": "2021-01-21T18:53:45.791Z",
            "userId": 1,
            "groupId": 11
        }
    }
]

但它也在急切地加载用户的管理信息。 这只是额外的开销,我显然不需要这些信息。不在这里。 有什么想法可以分离这种急切加载吗?

您可以使用 joinTableAttributes 排除预加载数据。将空数组设置为不从关联的 table.

中获取任何内容
const admins = await group.getAdmins({
  attributes: ['id', 'firstname', 'lastname'],
  joinTableAttributes: []
});