#node.js #postgresql #express #sequelize.js
Вопрос:
Я использую Node.js с Express.js и продолжайте как 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;
Но когда я запускаю узел, я получаю эту ошибку: Customer.hasMany called with something that's not a subclass of Sequelize.Model
Попробовал не связываться с моделью заказа, как предлагалось в других постах, но у меня это не сработало.