【问题标题】:Automatic Eager Loading in Sequelize when I am using belongsToMany assocation当我使用 belongsToMany 关联时,Sequelize 中的自动急切加载
【发布时间】:2021-01-23 03:02:01
【问题描述】:

好的,考虑一下。我的数据库中有 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
        }
    }
]

但它也急切地加载用户的管理信息。 这只是额外的开销,我显然不需要这些信息。不在这里。 任何想法如何分离这个急切的加载?

【问题讨论】:

    标签: javascript node.js database postgresql sequelize.js


    【解决方案1】:

    您可以使用joinTableAttributes 排除急切加载数据。将空数组设置为不从关联表中获取任何内容。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 2018-01-17
      • 2015-02-24
      • 2018-05-29
      • 2021-02-07
      • 1970-01-01
      • 2019-02-03
      相关资源
      最近更新 更多