#node.js #postgresql #sequelize.js #relational-database #associations
Вопрос:
Я новичок в секвенировании, у меня есть база данных Postgres
У меня есть две таблицы, которые должны быть связаны друг с другом как отношение «Многие ко многим», основанное на сквозной таблице.
Первые две таблицы:
- покупатель
- магазин товаров
И третья таблица, которая находится между ними, — это список заказов:
И вот как я установил их связь с таблицей order_list:
Customer.associate = models => {
Customer.belongsToMany(models.StoreProduct, {
through: models.OrderList,
unique: false,
foreignKey: 'customers_cid',
});
}
// and for the StoreProduct I have it like this
StoreProduct.associate = models => {
StoreProduct.belongsToMany(models.Customer, {
through: models.OrderList,
unique: false,
foreignKey: 'store_products_spid',
});
}
Затем, что касается таблицы списка заказов, я хотел включить два дополнительных столбца «количество» и «цена».
Количество в основном будет зависеть от выбора клиентом нескольких товаров store_product. Затем я хотел, чтобы в столбце «Цена» было записано количество товаров, выбранных клиентом, как количество * цена стоимости продукта. У меня есть столбец цен в store_products
table
as, поэтому я хотел quantity
, чтобы запись была записана на order_list table
* price
в store_products table
основном. Не могу понять, как это сделать внутри order_list table
price
колонки.
вот мое определение order_list table
module.exports = (sequelize, DataTypes) => {
const OrderList = sequelize.define('OrderList', {
quantity: {
type: DataTypes.INTEGER
},
price: { // Here I wanted SUM(quantity * StoreProductID.price) How do I do it?
type: DataTypes.DECIMAL(10, 2)
}
}, {
tableName: 'order_list',
timestamps: true,
createdAt: 'created_at',
updatedAt: 'updated_at',
// paranoid: true
});
return OrderList;
}
Вот остальная часть определенных двух таблиц StoreProduct
const StoreProduct = sequelize.define('StoreProduct', {
spid: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
allowNull: false,
primaryKey: true
},
product_name: {
type: DataTypes.STRING(100),
allowNull: false,
unique: true,
// validate: {
// len: [1, 100]
// }
},
type: {
type: DataTypes.STRING(25),
allowNull: true,
// validate: {
// len: [1, 100]
// }
},
description: {
type: DataTypes.TEXT,
allowNull: true
},
price: {
type: DataTypes.DECIMAL(10, 2),
allowNull: false
},
quantity: {
type: DataTypes.INTEGER,
allowNull: false
}
}, {
tableName: 'store_products',
timestamps: true,
createdAt: 'created_at',
updatedAt: 'updated_at',
// freezeTableName: true
// paranoid: true
})
Customer Table
const Customer = sequelize.define('Customer', {
cid: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
allowNull: false,
primaryKey: true
},
first_name: {
type: DataTypes.STRING(25),
},
last_name: {
type: DataTypes.STRING(25),
},
address: {
type: DataTypes.STRING(100),
allowNull: false
},
zip_code: {
type: DataTypes.STRING(25),
allowNull: false
},
city: {
type: DataTypes.STRING(50),
allowNull: false
},
country: {
type: DataTypes.STRING(50),
allowNull: false
},
email: {
type: DataTypes.STRING(50),
allowNull: false
}
}, {
tableName: 'customers',
timestamps: true,
createdAt: 'created_at',
updatedAt: 'updated_at',
// paranoid: true
})
So I wanted the price
column from the order_list table
to monitor this SQL query basically but done in the world of Sequelize which I am new too:
SELECT SUM(StoreProduct.price * OrderList.quantity)
FROM store_products AS StoreProduct
JOIN order_list AS OrderList
ON OrderList.store_products_spid = StoreProduct.spid;
// or maybe remove SUM idk but non the less
I want
StoreProduct.price * OrderList.quantity
Done inside the define in the price
column of order_list table
const OrderList = sequelize.define('OrderList', {
quantity: {
type: DataTypes.INTEGER
},
price: { // DONE HERE StoreProduct.price * OrderList.quantity with StoreProduct the FKEY as demonstrated above
type: DataTypes.DECIMAL(10, 2)
}
}, {
tableName: 'order_list',
timestamps: true,
createdAt: 'created_at',
updatedAt: 'updated_at',
// paranoid: true
});