Sequelize - Postgres - Как создать новый объект из соединительной таблицы - PullRequest
0 голосов
/ 04 апреля 2020

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

Документы: https://sequelize.org/master/manual/assocs.html https://sequelize.org/master/class/lib/associations/belongs-to-many.js~BelongsToMany.html

Пример кода:

import { Model as SQLModel } from 'sequelize';

class CarCompany extends SQLModel {};
class BodyStyle extends SQLModel {};
class Model extends SQLModel {};

// A car company can make multiple types of cars
CarCompany.hasMany(BodyStyle);

// A type of car can be made by multiple companies.
// We have a junction table to represent this relationship
BodyStyle.belongsToMany(CarCompany, { through: CarCompanyBodyStyles });

// Each model has only one type that it fits into and only one company that makes it
Model.belongsTo(CarCompanyBodyStyles);

// Now let's create some example car types
const convertible = new BodyStyle({ name: 'Convertible' });
const suv = new BodyStyle({ name: 'SUV' });

// Now let's create some example car companies
const toyota = new CarCompany({ name: 'Toyota' });
const ferrari = new CarCompany({ name: 'Ferrari' });

// Now let's specify which types of cars are made by each company
const toyotaConvertibles = toyota.addBodyStyle(convertible);
const toyotaSUVs = toyota.addBodyStyle(suv);

const ferrariConvertibles = ferrari.addBodyStyle(convertible);

// Now let's define some specific models
const solara = toyotaConvertibles.createModel({ name: 'Solara' });
const rav4 = toyotaSUVs.createModel({ name: 'RAV-4' });

const spider = ferrariConvertibles.createModel({ name: '488 Spider' });

// Now lets see some nested relational objects that we have created:
const toyotaModels = CarCompany.findByPk(
  toyota.id,
  {
    include: [
      {
        all: true,
        nested: true,
      },
    ],
  },
);
const ferrariModels = CarCompany.findByPk(
  ferrari.id,
  {
    include: [
      {
        all: true,
        nested: true,
      },
    ],
  },
);

console.log({ ferrariModels, toyotaModels });

То, что я надеялся увидеть, выглядит примерно так:

{
  ferrariModels: {
    bodyStyles: [
      {
        name: 'Convertible',
        models: [
          { name: '488 Spider' },
        ],
      },
    ],
  },
  toyotaModels: {
    bodyStyles: [
      {
        name: 'SUV',
        models: [
          { name: 'RAV-4' },
        ],
      },
      {
        name: 'Convertible',
        models: [
          { name: 'Solara' },
        ],
      },
    ],
  },
}

Но вместо этого я получаю ошибку :

TypeError: toyotaConvertibles.createModel is not a function

Что я делаю не так? Как я должен go создать такой тип отношений?

...