N:M 使用 sequelizejs 预先加载(包括)

N:M eager loading (include) using sequelizejs

所以我发现自己在 M:N 关系

中尝试使用 include eager loading 功能时遇到了麻烦

用户模型关系:

User.belongsToMany(models.rol, {
      through: {
        model: models['usuario_rol']
      },
      as: {
        plural: 'roles',
        singular: 'rol'
      },
      foreignKey: 'idusuario'
});

角色模型关系:

Rol.belongsToMany(models.usuario, {
      through: {
        model: models['usuario_rol']
      },
      foreignKey: 'idrol'
});

最后查询:

db.usuario.findOne({
    where: {
      id: insert.id
    },
    include: [
      {
        model: db.rol
      }
    ]
});

如果我们尝试这样做,它会崩溃并显示错误:rol 未关联到 usuario!

奇怪的是,通过 sequelize 用户对象的实例,我可以使用 user.getRoles()

获取角色

你知道为什么会这样吗?

当您在关联函数中指定别名时(在本例中为 roles),您还必须将其传递给包含:

return User.findOne({
  where: {
    id: 52
  },
  include: [
    {
      model: rol,
      as: 'roles'
    }
  ]
});

您也可以保存关联并将其传递:

User.Roles = User.belongsToMany(models.rol, {
  through: {
    model: models['usuario_rol']
  },
  as: {
    plural: 'roles',
    singular: 'rol'
  },
  foreignKey: 'idusuario'
});

return User.findOne({
  where: {
    id: 52
  },
  include: [
    {
      association: User.Roles
    }
  ]
});