Нужен совет, как заполнить "сквозную" таблицу в Sequelize? - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь выяснить, как N: M работает в сиквелизе, и у меня проблема с заполнением сквозной таблицы.

Итак, у меня есть следующие модели:

Product / Category models


'use strict';
module.exports = (sequelize, DataTypes) => {
  const Category = sequelize.define('Category', {
    name: DataTypes.STRING
  }, {});

  return Category;
};


module.exports = (sequelize, DataTypes) => {
  const Product = sequelize.define(
    'Product',
    {
      name: DataTypes.STRING,
      price: DataTypes.INTEGER,
      description: DataTypes.TEXT,
      inStock: DataTypes.BOOLEAN
    },
    {}
  )
  Product.associate = function(models) {
    // associations can be defined here
    models.Product.belongsToMany(models.Category, {
      through: 'Product_categories'
    })
    models.Category.belongsToMany(models.Product, {
      through: 'Product_categories'
    })
  }
  return Product
}

Это создает таблицу "Product_categories" в моей базе данных с идентификатором categoryId и productId. Допустим, у меня есть игра как продукт, которая относится к нескольким категориям (скажем, ps4 и xbox).

Как на самом деле заполнить таблицу «Product_categories» и связать продукт (игру) с категориями с помощью Id 1 и 2 (playstation и xbox).

Я все еще разбираюсь в Sequelize и ORM в целом, поэтому я немного застрял. Я должен добавить что-то в реальную модель? Или я справлюсь с этим в процессе создания продукта? Я так растерялся> <</p>

Я прочитал всю документацию, но, если честно, я просто немного запутался, поэтому я надеялся, что кто-нибудь сможет мне это объяснить.

Кроме того, это это маршрут, который я использую для создания указанного продукта:

router.post('/product', async (req, res, next) => {
  try {
    const { name, price, description, inStock } = req.body

    const createdProduct = await Product.create({
      name,
      price,
      description,
      inStock
    })

    res.send(createdProduct)
  } catch (error) {
    next(error)
  }
})

Помощь очень ценится! Спасибо !!

1 Ответ

0 голосов
/ 20 марта 2020

Вы можете попробовать:

await createdProduct.addCategory(category)

или

await createdProduct.addCategorys(categories)

см. ассоциации «многие ко многим»

...