【问题标题】:Nested relations with Sequelize与 Sequelize 的嵌套关系
【发布时间】:2014-08-08 14:20:57
【问题描述】:

我正在使用带有 Node + MySQL 的 Sequelize。

我有一个类似这样的模型结构:

// models:
var Group, Issue, Invite;

// many Issues per Group
Group.hasMany(Issue);
Issue.belongsTo(Group);

// Groups can invite other Groups to work on their Issues
Issue.hasMany(Invite, {foreignKey: groupId});
Invite.belongsTo(Issue, {foreignKey: groupId});
Group.hasMany(Invite, {foreignKey: inviteeId});
Invite.belongsTo(Group, {foreignKey: inviteeId});

// given an Issue id, include all Invites + invited Groups (inviteeId) - But how?
var query = {
    where: {id: ...}, 
    include: ???
};
Issue.find(query).complete(function(err, issue) {
    var invites = issue.invites;
    var firstInvitedGroup = issue.invites[0].group;
    // ...
});

这有可能吗?有哪些可能的解决方法?谢谢!

【问题讨论】:

    标签: javascript mysql sequelize.js


    【解决方案1】:

    Sequelize Docs: Nested Eager Loading

    示例

    Issue.find({
        include: [
            {
                model: Invite,
                include: [Group]
            }
        ]
    });
    

    【讨论】:

      【解决方案2】:

      如果您想预先加载所有嵌套关联,请使用此功能。

      Issue.find({
          include:getNestedAssociations(Issue)
      });
      
      
      
      //Recursively load all bested associtiaons
      function getNestedAssociations(_model) {
        const associations = [];
        for (const association of Object.keys(_model.associations)) {
          const model = _model.associations[association].target;
          const as = association;
          const include = getNestedAssociations(model);
          associations.push({
            model: model,
            as: as,
            ...(include && { include: include }),
          });
        }
        return associations;
      }
      

      【讨论】:

        【解决方案3】:

        在失去所有希望之后,我终于尝试了一个有效的随机命中。 只发送带有空数组的属性,然后它不会包含在结果中

        {
            model: User,
            as: 'users',
            attributes: [],  // This will work//
            where: {
              user_id: 1
            }
          }
        

        【讨论】:

          猜你喜欢
          • 2021-05-01
          • 1970-01-01
          • 2015-10-07
          • 2017-11-19
          • 2011-10-21
          • 2017-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多