您好,我是 Sequelize ORM 库的新手。我正在尝试将一些模型相互关联。当我添加与模型的关系时,它会给出以下错误。
throw new Error(`${source.name}.${_.lowerFirst(Type.name)} called with something that's not a subclass of Sequelize.Model`);
以下是我的模型定义。请注意,每个模型都在每个文件中。
const { DataTypes, Model } = require("sequelize");
const { Postgres } = require("../../config/postgres");
const { Department } = require("./department.model");
class Business extends Model {}
Business.init(
{
name: {
type: DataTypes.STRING,
allowNull: false,
},
type: {
type: DataTypes.STRING,
allowNull: false,
},
industry: {
type: DataTypes.ENUM([
"Finance",
"Healthcare",
"Retail",
"Education",
"Pharmaceutical",
"Agriculture",
"Other",
]),
allowNull: false,
},
description: {
type: DataTypes.TEXT,
allowNull: true,
},
},
{
sequelize: Postgres,
modelName: "Business",
tableName: "businesses",
},
);
Business.hasMany(Department, {
foreignKey: "businessId",
as: "departments",
});
module.exports = { Business };
const { DataTypes, Model } = require("sequelize");
const { Postgres } = require("../../config/postgres");
const { Order } = require("./order.model");
const { Business } = require("./business.model");
class Department extends Model {}
Department.init(
{
name: {
type: DataTypes.STRING,
allowNull: false,
},
description: {
type: DataTypes.TEXT,
allowNull: true,
},
businessId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: Business,
key: "id",
},
},
},
{
sequelize: Postgres,
modelName: "Department",
tableName: "departments",
},
);
Department.belongsTo(Business, {
foreignKey: "businessId",
as: "business",
});
Department.hasMany(Order, {
foreignKey: "departmentId",
as: "orders",
});
module.exports = { Department };
const { DataTypes, Model } = require("sequelize");
const { Postgres } = require("../../config/postgres");
const { Department } = require("./department.model");
class Order extends Model {}
Order.init(
{
productName: {
type: DataTypes.STRING,
allowNull: false,
},
quantity: {
type: DataTypes.INTEGER,
allowNull: false,
},
amount: {
type: DataTypes.DECIMAL(10, 2),
allowNull: false,
},
status: {
type: DataTypes.ENUM(["SUCCESS", "PENDING", "FAILED"]),
defaultValue: "PENDING",
allowNull: false,
},
orderReference: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
departmentId: {
type: DataTypes.INTEGER,
references: {
model: Department,
key: "id",
},
allowNull: false,
},
},
{
sequelize: Postgres,
modelName: "Order",
tableName: "orders",
},
);
Order.belongsTo(Department, {
foreignKey: "departmentId",
as: "department",
});
module.exports = { Order };
下面是一个尝试查看特定业务订单的函数。
const getOrderDetails = async (request, response) => {
const businessId = request.user.id;
const business = await Business.findByPk(businessId, {
include: [
{
model: Department,
as: "departments",
include: [
{
model: Order,
as: "orders",
},
],
},
],
});
if (!business) {
console.log("Business not found");
return;
}
console.log(business);
}
我尝试过关联模型但无法关联。我还尝试在模型类中定义静态关联方法,如下所示:
static associate(models) {
this.belongsTo(models.Business)
}
Department.associate({ Business })
您应该在一个单独的模块(例如 db init 模块或类似模块)中调用关联方法,您可以在其中导入所有模型并按照您需要的方式关联它们,或者在每个模型中定义一个静态
associate
方法并在此调用它们分离模块并消除彼此模块中模型的交叉引用:
db.js
const { Department } = require("./department.model");
const { Order } = require("./order.model");
const { Business } = require("./business.model");
Business.hasMany(Department, {
foreignKey: "businessId",
as: "departments",
});
Department.belongsTo(Business, {
foreignKey: "businessId",
as: "business",
});
Department.hasMany(Order, {
foreignKey: "departmentId",
as: "orders",
});
Order.belongsTo(Department, {
foreignKey: "departmentId",
as: "department",
});