Sequelize 定义关联时的循环依赖:使用非 Sequelize.Model 子类的内容调用 ownsToMany

问题描述 投票:0回答:1

我正在尝试定义两个模型之间的多对多关联:

BlogPost
Category
。我已经按照官方文档定义了模型,但是当我运行我的应用程序时,在调用
sequelize.sync()
时出现此错误:

/Users/muoki/Sites/node_blog/node_modules/sequelize/lib/associations/mixin.js:33
      throw new Error(`${this.name}.belongsToMany called with something that's not a subclass of Sequelize.Model`);
      ^

Error: category.belongsToMany called with something that's not a subclass of Sequelize.Model
    at Function.belongsToMany (/Users/muoki/Sites/node_blog/node_modules/sequelize/lib/associations/mixin.js:33:13)
    at Object.<anonymous> (/Users/muoki/Sites/node_blog/models/Category.js:20:10)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (/Users/muoki/Sites/node_blog/models/BlogPost.js:4:18)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
[nodemon] app crashed - waiting for file changes before starting...

当我从任一模型中删除一次关联时,数据库同步成功,并且所有表都已创建,包括数据透视表

blog_category
我可能会缺少什么?

这是我的 BlogPost.js:

const Sequelize = require("sequelize");
const sequelize = require("../util/database");
const User = require("./User");
const Category = require("./Category");

const BlogPost = sequelize.define(
  "blog_post",
  {
    id: {
      primaryKey: true,
      autoIncrement: true,
      type: Sequelize.DataTypes.BIGINT,
    },
    image_url: {
      type: Sequelize.DataTypes.TEXT,
    },
    title: {
      type: Sequelize.DataTypes.STRING,
      allowNull: false,
    },
    content: {
      type: Sequelize.DataTypes.TEXT,
      allowNull: false,
    },
  },
  {
    timestamps: true,
    createdAt: "created_at",
    updatedAt: "updated_at",
  }
);



BlogPost.belongsTo(User);

BlogPost.belongsToMany(Category, {
  through: "blog_category",
});

module.exports = BlogPost;

这是我的 Category.js

const Sequelize = require("sequelize");
const sequelize = require("../util/database");
const BlogPost = require("./BlogPost");


const Category = sequelize.define("category", {
  id: {
    type: Sequelize.DataTypes.BIGINT,
    notNull: true,
    primaryKey: true,
    autoIncrement: true,
  },
  category: {
    type: Sequelize.DataTypes.STRING,
    notNull: true,
  },
});


Category.belongsToMany(BlogPost, {
  through: "blog_category",
});

module.exports = Category;
node.js express sequelize.js
1个回答
0
投票

您只需导入另一个模块中的所有模型,并在下面定义所有关联(类似于

db.js
,您创建 Sequelize 实例并在最后调用
sync
)。

© www.soinside.com 2019 - 2024. All rights reserved.