javascript - 当我使用belongsToMany 关联时,Sequelize 中的自动预加载

标签 javascript node.js database postgresql sequelize.js

好吧考虑这个。我的数据库中有 2 个实体 - 用户 。所以他们之间存在关系——

  • 一个用户可以是多个组的成员,一个组可以有多个成员(Many to Many)
  • 一个管理员(用户)可以是多个组的管理员,一个组可以有多个管理员(多对多)

  • 代码如下——

    // 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 排除预先加载数据。将空数组设置为不从关联表中获取任何内容。

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

    关于javascript - 当我使用belongsToMany 关联时,Sequelize 中的自动预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65835302/

    相关文章:

    SQL 按客户端位置分组

    javascript - 如何在 Angularjs 中将值从服务传递到 Controller

    javascript - jquery 淡入、淡出一些元素一起

    javascript - 用 Breeze 加载元数据很慢

    javascript - 当父窗口跨域时,如何从 iframe 获取父窗口内容窗口的引用

    jquery - Node js 和 socket.io 与 lua 服务器开发

    node.js - 谷歌 OAuth2 API 刷新 token

    node.js - 使用 begin_with 查询 dynamodb

    php - 如何让 PhpMyAdmin 删除/截断而不要求确认

    实时广告平台 MongoDB vs. Cassandra vs. MySQL