связать ассоциацию с той же таблицей

0

У меня есть две таблицы со следующей структурой:

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}.

Можно ли создать такую ассоциацию с последним сиквелизом?

Спасибо за помощь/идеи!

  • 0
    Это означает, что вы хотите вернуть продукты, включающие бренд, у которого brand_id = this. Brand_ID. Правильно?
  • 0
    @ChuongTran да, это именно то, чего я хочу достичь.
Показать ещё 1 комментарий
Теги:
sequelize.js

2 ответа

0
Лучший ответ

Я смог выполнить то, что хотел сделать, с помощью следующего определения отношения hasMany в моей модели продукта:

models.product.hasMany(models.product, {
  as: 'brand_products',
  foreignKey: 'brand_id',
  sourceKey: 'brand_id',
  useJunctionTable: false
})

В моей модели продукта у меня теперь есть массив (brand_products []), к которому я могу получить доступ, чтобы получить продукты той же марки.

Решением было использование атрибутов foreignKey и sourceKey, а также useJunctionTable: false, потому что в этом случае мне это действительно не нужно.

0

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);
});
  • 0
    Спасибо за ответ, приятель. То, о чем я говорю, это что-то вроде этого: Product.findByPk (1) .products_with_same_brand [] Я имею в виду, то, что вы опубликовали, это просто простой способ получить продукты с определенным brand_id, это не то, что мне действительно нужно / нужно , Может быть, мое объяснение не достаточно хорошее.
  • 0
    @cham_eleon Это значит, что same_brand - это массив?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню