node.js - 错误:.hasMany 调用的东西不是 Sequelize.Model 的子类
问题描述
我将 Node.js 与 Express.js 和 Sequelize 用作 ORM。
我有与模型订单相关的模型客户。(客户有很多订单)。
像这样:
const { Model, DataTypes, Sequelize } = require('sequelize');
const { USER_TABLE } = require('./user.model');
const CUSTOMER_TABLE = 'customers';
const CustomerSchema = {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER,
},
name: {
allowNull: false,
type: DataTypes.STRING,
},
lastName: {
allowNull: false,
type: DataTypes.STRING,
field: 'last_name',
},
phone: {
allowNull: true,
type: DataTypes.STRING,
},
createdAt: {
allowNull: false,
type: DataTypes.DATE,
field: 'created_at',
defaultValue: Sequelize.NOW,
},
userId: {
field: 'user_id',
allowNull: false,
type: DataTypes.INTEGER,
unique: true,
references: {
model: USER_TABLE,
key: 'id',
},
onUpdate: 'CASCADE',
onDelete: 'SET NULL',
},
};
class Customer extends Model {
static associate(models) {
this.belongsTo(models.User, { as: 'user' });
this.hasMany(models.Order, { as: 'orders', foreignKey: 'customerId' }); here is the error
}
static config(sequelize) {
return {
sequelize,
tableName: CUSTOMER_TABLE,
modelName: 'Customer',
timestamps: false,
};
}
}
module.exports = { CUSTOMER_TABLE, CustomerSchema, Customer };
另一方面,模型订单:
const { Model, DataTypes, Sequelize } = require('sequelize');
const { CUSTOMER_TABLE } = require('../models/customer.model');
const ORDER_TABLE = 'orders';
const OrderSchema = {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER,
},
customerId: {
field: 'customer_id',
allowNull: false,
type: DataTypes.INTEGER,
unique: true,
references: {
model: CUSTOMER_TABLE,
key: 'id',
},
onUpdate: 'CASCADE',
onDelete: 'SET NULL',
},
createdAt: {
allowNull: false,
type: DataTypes.DATE,
field: 'created_at',
defaultValue: Sequelize.NOW,
},
};
class Order extends Model {
static associate(models) {
this.belongsTo(models.Customer, { as: 'customer' });
}
static config(sequelize) {
return {
sequelize,
tableName: ORDER_TABLE,
modelName: 'Customer',
timestamps: false,
};
}
}
module.exports = { ORDER_TABLE, OrderSchema, Order };
index.js
const { User, UserSchema } = require('./user.model');
const { Customer, CustomerSchema } = require('./customer.model');
const { Category, CategorySchema } = require('./category.model');
const { Product, ProductSchema } = require('./product.model');
const { Order, OrderSchema } = require('./order.model');
function setupModels(sequelize) {
User.init(UserSchema, User.config(sequelize));
Customer.init(CustomerSchema, Customer.config(sequelize));
Category.init(CategorySchema, Category.config(sequelize));
Product.init(ProductSchema, Product.config(sequelize));
Order.init(OrderSchema, Order.config(sequelize));
User.associate(sequelize.models);
Customer.associate(sequelize.models);
Category.associate(sequelize.models);
Product.associate(sequelize.models);
Order.associate(sequelize.models);
}
module.exports = setupModels;
但是当我运行 Node 时,我得到了这个错误:
Customer.hasMany called with something that's not a subclass of Sequelize.Model
正如其他帖子中所建议的那样,尝试了 Order 模型的不关系,但它对我不起作用。
解决方案
推荐阅读
- javascript - 如何用空格替换前导零
- python - 属性创建函数
- regex - 如何从批处理脚本调用 powershell 正则表达式命令
- javascript - 如何在 Javascript 中为 iOS 和 Android 创建可靠的指南针?
- sql - 表“a”有一个条目,但无法从这部分查询中引用它
- c# - 使用 DataAnnotations 绑定自定义格式的 TimeSpan
- php - 在magento_2.5.5上安装主题后的“/checkout/”
- machine-learning - 需要规范化数据
- python - 我不明白这段代码
- google-app-engine - 从 Cloud VPN 将请求路由到 GAE Flex?