【问题标题】:Sequelize association with one foreign keySequelize 与一个外键的关联
【发布时间】:2018-08-21 01:33:03
【问题描述】:

我有一个最初使用 Django 创建的数据库,它是为单个外键关联设置的,here is the JSON dump.

现在这将被映射为:

export const Category = sequelize.define(
  'category',
  {
    name: { type: Sequelize.STRING, unique: true },
  },
  {
    timestamps: false,
    tableName: 'ingredients_category',
  }
);

export const Ingredient = sequelize.define(
  'ingredient',
  {
    name: { type: Sequelize.STRING, unique: true },
    notes: { type: Sequelize.TEXT, defaultValue: '' },
    category_id: {
      type: Sequelize.INTEGER,
      references: {
        model: Category,
        key: 'id',
      },
    },
  },
  {
    timestamps: false,
    tableName: 'ingredients_ingredient',
  }
);

Category.belongsToMany(Ingredient, {
  foreignKey: 'category_id',
  constraints: false,
  through: 'ingredient_category',
});
Ingredient.hasOne(Category, {
  // foreignKey: 'ingredientId',
  constraints: false,
});

现在 sequelize 抱怨它在 Category 模型上缺少一个外键,但是虽然成分上只有一个类别,但类别并不限于该一个成分。有人可以帮助我理解这种关联吗?

更新:对于最终答案,这只是一个不正确的关联设置:

export const Category = sequelize.define(
  'category',
  {
    name: { type: Sequelize.STRING, unique: true },
  },
  {
    timestamps: false,
    tableName: 'ingredients_category',
  }
);

export const Ingredient = sequelize.define(
  'ingredient',
  {
    name: { type: Sequelize.STRING, unique: true },
    notes: { type: Sequelize.TEXT, defaultValue: '' },
  },
  {
    timestamps: false,
    tableName: 'ingredients_ingredient',
  }
);

Category.hasMany(Ingredient, {
  foreignKey: 'category_id',
});
Ingredient.belongsTo(Category, {
  foreignKey: 'category_id',
});

【问题讨论】:

    标签: javascript sqlite sequelize.js


    【解决方案1】:

    belongsToMany 用于关系 N:M 所以ingredient_category 应该是第三个表。现在据我了解,您需要ingredients 1:N categories 的关系,因此Category 可以有很多成分,因此您应该使用hasMany

    在您的情况下,您不能使用hasOne,因为它会在Categories 上创建成分的外键,而hasMany 将在成分上创建FK。

    Category.hasMany(Ingredient, {
      foreignKey: 'category_id',
      constraints: false,
    });
    Ingredient.belongsTo(Category, {
      // foreignKey: 'ingredientId',
      constraints: false,
    });
    

    Here 是文档:

    【讨论】:

      猜你喜欢
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多