Как включить более одной таблицы, используя Sequelize? - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть следующие таблицы:

Product:
name: string, description: string, image: string

Brand:
name: string

Category:
name: string

Один продукт может иметь только одну марку.Один продукт может иметь несколько категорий.

Мои ассоциации:

models/product.js:
Product.associate = function(models) {
    Product.hasOne(models.Brand, {
      foreignKey: "productId",
      as: "brand"
    }),
      Product.hasMany(models.Category, {
        foreignKey: "productId",
        as: "categories"
      });
  }
models/category.js:
Category.belongsTo(models.Product, {
      foreignKey: "productId",
      onDelete: "CASCADE"
    })
models/brand.js:
Brand.belongsTo(models.Product, {
      foreignKey: "productId",
      onDelete: "CASCADE"
    })

1 - пока все нормально?Отступ в файлах models / product.js кажется мне странным.

2 - в моем контроллере Products, как я могу получить информацию о бренде и категориях моих продуктов?В настоящее время у меня есть:

controllers/products.js:
list(req, res) {
    return Product.findAll({
      include: [
        {
          model: Category,
          as: "categories"
        }
      ]
    })
      .then(products => res.status(200).send(products))
      .catch(error => res.status(400).send(error));
  }

Включены категории, как я могу также включить бренд?

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

1 Ответ

1 голос
/ 15 апреля 2019

Учитывая установленные ассоциации, вы должны иметь возможность добавить другую модель, разделенную запятыми, например:

controllers/products.js:
list(req, res) {
    return Product.findAll({
      include: [
        {
          model: Category,
          as: "categories"
        },
        {
          model: Brand,
          as: "brand"
        }
      ]
    })
      .then(products => res.status(200).send(products))
      .catch(error => res.status(400).send(error));
  }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...