Node.js Sequelize belong连接表中的其他属性

Node.js Sequelize belong连接表中的其他属性,node.js,sequelize.js,has-and-belongs-to-many,sequelize-cli,Node.js,Sequelize.js,Has And Belongs To Many,Sequelize Cli,我对BelongToMany关系的联接表中的附加属性有问题。 在set或add方法中,此属性不会传递给mysql 我将在set方法中以“通过”属性的方式传递文档,但它不起作用。 有人知道有什么问题吗,因为遵循文档是不起作用的 注意:联接的注册和更新是正确的,只有未传递到表的附加属性是正确的 功能模型: export default function(sequelize, DataTypes) { const Functionality = sequelize.define('function

我对BelongToMany关系的联接表中的附加属性有问题。 在set或add方法中,此属性不会传递给mysql

我将在set方法中以“通过”属性的方式传递文档,但它不起作用。 有人知道有什么问题吗,因为遵循文档是不起作用的

注意:联接的注册和更新是正确的,只有未传递到表的附加属性是正确的

功能模型:

export default function(sequelize, DataTypes) {
  const Functionality = sequelize.define('functionality', {
    id: {
      type: DataTypes.INTEGER(11),
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    name: {
      field: 'name',
      type: DataTypes.STRING(300),
      allowNull: false
    }
  }, {
    classMethods: {
      associate: function(models) {
        Functionality.belongsToMany(models.privilege, { as: 'privilegies', through: models.functionality_privilege, foreignKey: 'functionality_id' });
      }
    },
    tableName: 'functionality',
    freezeTableName: true,
    timestamps: true,
    createdAt: 'createdAt',
    updatedAt: 'updatedAt'
  });
  return Functionality;
}
权限模型:

export default function(sequelize, DataTypes) {
  const Privilege = sequelize.define('privilege', {
    id: {
      type: DataTypes.INTEGER(11),
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    name: {
      field: 'name',
      type: DataTypes.STRING(300),
      allowNull: false
    }
  }, {
    classMethods: {
      associate: function(models) {
        Privilege.belongsToMany(models.functionality, { as: 'functionalities', through: models.functionality_privilege, foreignKey: 'privilege_id' });
      }
    },
    tableName: 'privilege',
    freezeTableName: true,
    timestamps: true,
    createdAt: 'createdAt',
    updatedAt: 'updatedAt'
  });
  return Privilege;
}
export default function(sequelize, DataTypes) {
  const Functionalityprivilege = sequelize.define('functionality_privilege', {
    id: {
      type: DataTypes.INTEGER(11),
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    edit: {
      field: 'edit',
      type: DataTypes.BOOLEAN
    }
  }, {
    tableName: 'functionality_privilege',
    freezeTableName: true,
    timestamps: true,
    createdAt: 'created_at',
    updatedAt: 'updated_at'
  });
  return Functionalityprivilege;
}
功能特权模型:

export default function(sequelize, DataTypes) {
  const Privilege = sequelize.define('privilege', {
    id: {
      type: DataTypes.INTEGER(11),
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    name: {
      field: 'name',
      type: DataTypes.STRING(300),
      allowNull: false
    }
  }, {
    classMethods: {
      associate: function(models) {
        Privilege.belongsToMany(models.functionality, { as: 'functionalities', through: models.functionality_privilege, foreignKey: 'privilege_id' });
      }
    },
    tableName: 'privilege',
    freezeTableName: true,
    timestamps: true,
    createdAt: 'createdAt',
    updatedAt: 'updatedAt'
  });
  return Privilege;
}
export default function(sequelize, DataTypes) {
  const Functionalityprivilege = sequelize.define('functionality_privilege', {
    id: {
      type: DataTypes.INTEGER(11),
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    edit: {
      field: 'edit',
      type: DataTypes.BOOLEAN
    }
  }, {
    tableName: 'functionality_privilege',
    freezeTableName: true,
    timestamps: true,
    createdAt: 'created_at',
    updatedAt: 'updated_at'
  });
  return Functionalityprivilege;
}
方法创建:

create(options) {
    let obj = options.payload;
    return this.functionalityDao.create(obj)
    .then((result) => {
      return result.setPrivilegies(obj.privilegies, { through: { edit: obj.permissions }})
    });
  }


我没有用“set”函数实现这一点,但用“add”方法实现了这一点:

result.addPrivilege(privilege, { through: { edit: true }});
它应该适用于已经存在的特权。它不适用于实体数组(在您的例子中是特权),所以我不得不多次调用'add'方法。像这样:

return Promise.all(
  privileges.map(privilege =>  result.addPrivilege(privilege, { through: { edit: true }}));
)