N:M动态加载(包括)使用sequelizejs



所以我发现自己遇到了麻烦,试图在M:N关系中使用包含即时加载功能

用户模型关系:

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!

奇怪的是,对于序列化用户对象的实例,我可以使用user. getroles ()

获取角色

你知道为什么会发生这种情况吗?

当您在关联函数中指定别名时(在本例中为roles),您必须将该别名也传递给include:

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
    }
  ]
});

最新更新