postgresql - Sequelize 自关联创建额外的列

标签 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 列,但我不确定如何定义双向关系(流派可能有父级,流派可能有许多子级),只添加一列。

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

最佳答案

我想你可以使用 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 ,在这种情况下没有用。我的错。使用他的建议更正

关于postgresql - Sequelize 自关联创建额外的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27832023/

相关文章:

javascript - 为什么我的 sequelize 模型实例丢失了它的 id?

javascript - Ben Awad 视频教程问题与 npx mikro-orm 迁移 :create

express - Sequelize 创建对象后无法更新关联记录

javascript - 负载包括在现有模型上

c++ - Incomplete parameter error Including postgres.cpp working file in other .cpp 文件

foreign-keys - Sequelize 的外键无法按预期工作

Node.js Sequelize 依赖问题

mysql - 不使用 Taps 从 Heroku 提取数据的更快方法......第二部分

sql - 如何在特定事件之前对组中的事件进行计数

mysql - sql通过列号/索引/位置而不是列名选择列