我正在尝试定义两个模型之间的多对多关联:
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;
您只需导入另一个模块中的所有模型,并在下面定义所有关联(类似于
db.js
,您创建 Sequelize 实例并在最后调用 sync
)。