Как привязать к одному продукту определенное количество категорий?
Пишу проект, столкнулся с одной проблемкой.
Суть вопроса вот в чём, в моей базе данных существует таблица с Продуктами и таблица с Категориями (ещё есть таблица с Компаниями, но разобравшись с этой проблемой думаю найду решение и для этой), мне нужно чтобы один продукт имел внешние связи с определенным количеством категорий.
То есть к примеру:
| id | name |
|---|---|
| 1 | Red Dead Redemption 2 |
И есть таблица с категориями:
| id | name |
|---|---|
| 1 | Open-World |
| 2 | Action |
Вот как-то так, и мне требуется привязать продукт под первым айдишником одновременно и к Open-World, и Action. Диалект БД - MySQL, среда работы - NodeJS, Sequelize, ExpressJS.
Я пробовал вариант с третьей таблицей, но не особо догнал как это всё правильно сделать.
Буду рад любой помощи.
Ответы (1 шт):
Можно использовать таблицу связей, которая связывает продукты с категориями. Таким образом, у одного продукта может быть множество категорий, а у каждой категории может быть множество продуктов.
Например, можно создать таблицу "Продукты_Категории", которая будет иметь два поля - "product_id" и "category_id". Эти поля будут являться внешними ключами, связывающими таблицу "Продукты" с таблицей "Категории".
PS Я не так часто работал с Sequelize
Для создания связей между таблицами в Sequelize можно использовать методы "belongsTo" и "hasMany". Например:
const Product = sequelize.define('product', {
name: Sequelize.STRING
});
const Category = sequelize.define('category', {
name: Sequelize.STRING
});
const ProductCategory = sequelize.define('product_category', {});
Product.belongsToMany(Category, { through: ProductCategory });
Category.belongsToMany(Product, { through: ProductCategory });
Здесь мы создаем модели для таблиц "Продукты", "Категории" и "Продукты_Категории" (ProductCategory). Затем мы создаем связь "belongsToMany" между моделями "Продукты" и "Категории" через модель "Продукты_Категории". Также мы создаем обратную связь между моделями "Категории" и "Продукты".
Для добавления связей между продуктами и категориями можно использовать методы "addCategory" и "addCategories" у объектов модели "Продукт":
const product = await Product.findByPk(1);
const category1 = await Category.findByPk(1);
const category2 = await Category.findByPk(2);
await product.addCategories([category1, category2]);
Этот код добавит продукту с идентификатором 1 связи с категориями с идентификаторами 1 и 2.
Надеюсь, это поможет вам решить проблему.