N:使用sequelizejs进行加载(包括)

时间:2015-07-22 13:38:46

标签: node.js sequelize.js

所以我发现自己陷入了试图在M:N关系中使用包含预先加载功能的麻烦

用户模型关系:

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

rol模型关系:

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()获取角色

你知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

在关联函数中指定别名(在本例中为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
    }
  ]
});