У меня есть две таблицы со следующей структурой:
Product
Product.id
Product.name
Product.brand_id
Brand
Brand.id
Brand.name
То, чего я хочу достичь, это иметь связь (или что-то еще) с продуктом, который возвращает товары с одинаковым brand_id.
Я имею в виду что-то вроде Product.other_brand_products [], возвращающее результаты Product.
Я попытался сделать это с помощью атрибута VIRTUAL, но из-за геттера не асинхронно, и я не могу запросить findAll здесь с условием где, например, где: {brand_id: this.brand_id}.
Можно ли создать такую ассоциацию с последним сиквелизом?
Спасибо за помощь/идеи!
Я смог выполнить то, что хотел сделать, с помощью следующего определения отношения hasMany в моей модели продукта:
models.product.hasMany(models.product, {
as: 'brand_products',
foreignKey: 'brand_id',
sourceKey: 'brand_id',
useJunctionTable: false
})
В моей модели продукта у меня теперь есть массив (brand_products []), к которому я могу получить доступ, чтобы получить продукты той же марки.
Решением было использование атрибутов foreignKey и sourceKey, а также useJunctionTable: false, потому что в этом случае мне это действительно не нужно.
1. Проверьте связь между продуктом и брендом. Код определить так
Product.associate = function (models) {
// associations can be defined here
Product.belongsTo(models.Brand, {
as: 'brand',
foreignKey: 'brand_id',
targetKey: 'id'
});
};
2.Query
var brand_id = 1;
Product.findAll({
where: {
brand_id: brand_id
},
include: [{
model: Brand,
as: 'brand',
attributes: ['id', 'name'],
}]
})
.then(products => {
})
.catch(err => {
console.log('err', err);
});