Как привязать к одному продукту определенное количество категорий?

Рейтинг: 0Ответов: 1Опубликовано: 10.03.2023

Пишу проект, столкнулся с одной проблемкой.

Суть вопроса вот в чём, в моей базе данных существует таблица с Продуктами и таблица с Категориями (ещё есть таблица с Компаниями, но разобравшись с этой проблемой думаю найду решение и для этой), мне нужно чтобы один продукт имел внешние связи с определенным количеством категорий.

То есть к примеру:

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.

Надеюсь, это поможет вам решить проблему.