#node.js #postgresql #express #sequelize.js
#node.js #postgresql #экспресс #sequelize.js
Вопрос:
У меня есть следующие таблицы:
Product:
name: string, description: string, image: string
Brand:
name: string
Category:
name: string
У одного продукта может быть только один бренд.
Один продукт может иметь несколько категорий.
Мои ассоциации:
models/product.js:
Product.associate = function(models) {
Product.hasOne(models.Brand, {
foreignKey: "productId",
as: "brand"
}),
Product.hasMany(models.Category, {
foreignKey: "productId",
as: "categories"
});
}
models/category.js:
Category.belongsTo(models.Product, {
foreignKey: "productId",
onDelete: "CASCADE"
})
models/brand.js:
Brand.belongsTo(models.Product, {
foreignKey: "productId",
onDelete: "CASCADE"
})
1 — пока все в порядке? Отступ в models/product.js мне это кажется странным.
2- в контроллере my Products как мне получить как бренд, так и категории моих продуктов? В настоящее время у меня есть:
controllers/products.js:
list(req, res) {
return Product.findAll({
include: [
{
model: Category,
as: "categories"
}
]
})
.then(products => res.status(200).send(products))
.catch(error => res.status(400).send(error));
}
Категории включены, как мне также включить бренд?
Я ожидаю, что результатом будет массив продуктов, каждый из которых содержит бренд и одну или несколько категорий.
Ответ №1:
Учитывая установленные ассоциации, вы должны иметь возможность добавить другую модель, разделенную запятыми, например:
controllers/products.js:
list(req, res) {
return Product.findAll({
include: [
{
model: Category,
as: "categories"
},
{
model: Brand,
as: "brand"
}
]
})
.then(products => res.status(200).send(products))
.catch(error => res.status(400).send(error));
}