Я хочу иметь множественное количество в атрибуте модели. Я имею в виду, что у меня есть модель: Товар, на который ссылаются и связывают с моделями Запас и Покупка.
Хорошо работает с Stock-моделью. Я считаю количество отлично. Вот и я хочу то же самое с покупкой модели.
Product.findOne({
include: [{
model: User,
attributes: ["id", "username", "jabber", "email"],
as: 'creator'
},
{
model: Category,
as: 'category'
},
{
model: ProductImage,
as: 'images'
},
{
model: Stock,
attributes: []
},
{
model: Purchase,
attributes: [],
}],
attributes: {
exclude: ['fk_creator'],
// THIS IS THE PART WHICH NOT WORKS AS EXPECTED
include: [[Sequelize.fn("COUNT", Sequelize.col("stocks.fk_product")), "stock_count"],// this works
[Sequelize.fn("COUNT", Sequelize.col("purchases.fk_product")), "buy_count"]] // this gives just the same as stock_count but should give another number
},
where: {id: id},
group: ['product.id', 'images.id']
}).then((product) => {
res.send({status: true, data: product})
}).catch((err) => {
next(err)
});
Это запрос, сгенерированный sequelize:
SELECT `product`.`id`,
`product`.`title`,
`product`.`description`,
`product`.`product_type`,
`product`.`price`,
`product`.`catid`,
`product`.`rating`,
`product`.`createdat`,
`product`.`updatedat`,
Count(`stocks`.`fk_product`) AS `stock_count`,
Count(`purchases`.`fk_product`) AS `buy_count`,
`creator`.`id` AS `creator.id`,
`creator`.`username` AS `creator.username`,
`creator`.`jabber` AS `creator.jabber`,
`creator`.`email` AS `creator.email`,
`category`.`id` AS `category.id`,
`category`.`catname` AS `category.catname`,
`category`.`icon` AS `category.icon`,
`category`.`createdat` AS `category.createdAt`,
`category`.`updatedat` AS `category.updatedAt`,
`images`.`id` AS `images.id`,
`images`.`fk_product` AS `images.fk_product`,
`images`.`imageurl` AS `images.imageurl`,
`images`.`is_first` AS `images.is_first`,
`images`.`createdat` AS `images.createdAt`,
`images`.`updatedat` AS `images.updatedAt`
FROM `products` AS `product`
LEFT OUTER JOIN `users` AS `creator`
ON `product`.`fk_creator` = `creator`.`id`
LEFT OUTER JOIN `categories` AS `category`
ON `product`.`catid` = `category`.`id`
LEFT OUTER JOIN `product_images` AS `images`
ON `product`.`id` = `images`.`fk_product`
LEFT OUTER JOIN `stocks` AS `stocks`
ON `product`.`id` = `stocks`.`fk_product`
LEFT OUTER JOIN `purchases` AS `purchases`
ON `product`.`id` = `purchases`.`fk_product`
WHERE `product`.`id` = '1'
GROUP BY `product`.`id`,
`images`.`id`;
Итак, я получаю число, но оно всегда совпадает с stock_count.