Sequelize自我关联创建了额外的列

时间:2015-01-08 02:26:51

标签: postgresql sequelize.js

我使用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;
}

这个想法是会有父类型,每个可能有几个子类型。当我运行sync()时,表格创建得很好,但是有一个额外的列(GenreId)我无法解释:

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

解释模型的明智方法是只有一个parentGenreId列,但我不确定如何定义这种双向关系(类型可能有父类,类型可能有很多孩子)只有一个列被添加。

如何重新设计模型以正确定义关系?

1 个答案:

答案 0 :(得分:2)

我认为您可以使用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,对此案例无效。我的错。更正了他的建议