【发布时间】:2018-03-10 11:48:03
【问题描述】:
我正在制作一个简单的购物车。我有一个购物车模型、一个产品模型和一个直通表 CartItems。这些是关联:
models.Cart.belongsToMany(models.Product, { through: 'CartItems', as: 'items' })
models.Product.belongsToMany(models.Cart, { through: "CartItems" });
这些是模型的定义:
购物车模型
var Cart = sequelize.define('Cart', {
userId: {
allowNull: false,
type: Sequelize.INTEGER,
references: {
model: 'User',
key: 'id',
},
},
totalPrice: DataTypes.FLOAT
});
产品型号
var Product = sequelize.define('Product', {
code: DataTypes.STRING,
name: DataTypes.STRING,
price: DataTypes.FLOAT
});
CartItems 模型 在这个模型中,我添加了数量和价格属性,因为我在某处读到,最好了解他们下订单时的价格历史记录。还有数量属性,因为我只想在添加另一个产品而不是添加另一行时更改数量。
var CartItem = sequelize.define('CartItem', {
CartId: DataTypes.INTEGER,
ProductId: DataTypes.INTEGER,
quantity: DataTypes.INTEGER,
price: DataTypes.FLOAT
});
我知道这可能不是做事的最佳方式,但即使我更改了实现,我也想知道:如何访问 through 表中的属性?
具体来说,我正在尝试为结帐功能执行以下操作:
Cart.prototype.checkout = async function () {
let cartItemArray = await this.getItems({
include: [{
model: Product,
through: {
attributes: ['quantity'],
}
}]
});
cartItemArray = cartItemArray.map((item) => {
return {
code: item.code,
price: item.price,
quantity: item.quantity
};
});
let total = getTotalPrice(cartItemArray);
return total;
};
【问题讨论】:
-
最好有价格历史记录,但您不需要根据数量更新价格。你应该把它乘以数量来得到它。如果有任何折扣把它也放在那张桌子上。以便您稍后展示。
标签: javascript node.js sequelize.js