Sequelize 自关联创建额外的列

Sequelize self association creates extra column

我使用 Sequelize 定义了以下模型:

module.exports = function (sequelize, DataTypes) {
  var Genre = sequelize.define('Genre', {
    name: {
      type: DataTypes.STRING,
      allowNull: false
    }
  }, {
    classMethods: {
      associate: function (models) {
        Genre.hasMany(models.Genre, {as: 'subGenre'});
        Genre.belongsTo(models.Genre, {as: 'parentGenre'});
      }
    }
  });

  return Genre;
}

想法是会有 parent 种类型,每个 可能 有几个 sub-genres。当我 运行 sync() 时,table 创建得很好,但是有一个额外的列 (GenreId) 我无法解释:

"id";"integer";
"name";"character varying";255
"createdAt";"timestamp with time zone";
"updatedAt";"timestamp with time zone";
"GenreId";"integer";
"parentGenreId";"integer";

解释模型的明智方法是只有一个 parentGenreId 列,但我不确定如何定义 bi-directional 关系(流派可能有 parent,流派可能有很多 children),但只添加了一列。

如何修改模型以正确定义关系?

我认为你可以使用 through(未测试)

module.exports = function (sequelize, DataTypes) {
  var Genre = sequelize.define('Genre', {
    name: {
      type: DataTypes.STRING,
      allowNull: false
    }
  }, {
      classMethods: {
        associate: function (models) {
          Genre.hasMany(models.Genre, {as: 'children', foreignKey: 'ParentId'});
          Genre.belongsTo(models.Genre, {as: 'parent', foreignKey: 'ParentId'});
        }
      }
});

  return Genre;
}

所以你可以有 Genre#getChilrenGenre#getParent

编辑:由于@mick-hansen,through 适用于 belongsToMany,对这种情况没有用。我的错。使用他的建议更正