У меня есть визит, который содержит много этапов. Каждая стадия может иметь много типов операций. Когда я создаю посещение, я хочу, чтобы мои этапы и их типы операций были добавлены в один go.
Например, посещение музея может иметь этап для каждого этажа и на каждом этаже, который вы можете выполнять. различные вещи (= типы операций), такие как наблюдение, прослушивание, рисование, ...
У меня есть таблица соединений между этапами (может иметь много типов операций) и типами операций (может принадлежать многим этапам)
Я могу добавить «Мое посещение» и его этапы, но, тем не менее, я стараюсь включать «Типы операций», всегда есть ошибки. Я попытался использовать атрибут ключ 'model', 'association', я попытался передать строку или объект в качестве значения, я добавил модель для таблицы соединений (OperationTypeStage) явно, но ничего не получалось. Sequelize пытается вставить в OperationTypes вместо таблицы соединений (OperationTypeStage), или я получаю любую другую ошибку («key.include не является функцией», «OperationTypeStage не связан со стадией», ...).
Может кто-нибудь пролить свет, пожалуйста?
Мои модели настроены так:
// models
const Stage = sequelizeClient.define('Stage', { sequenceNumber: DataTypes.INTEGER }, {})
const OperationType = sequelizeClient.define('OperationType', { name: DataTypes.STRING }, {})
// associations
Stage.belongsToMany(models.OperationType, { through: 'OperationTypeStage', timestamps: false })
OperationType.belongsToMany(models.Stage, { through: 'OperationTypeStage', timestamps: false })
// 'Visit' to be created
visitData = {
"eta":"2020-03-18T16:34:00.000Z",
"Stages":[
{ "sequenceNumber":1 },
{ "sequenceNumber":2, "OperationTypes":[1,2] },
{ "sequenceNumber":3 },
{ "sequenceNumber":4, "OperationTypes":[2] },
]
}
Вот способы, которые я пробовал, но все они дают ошибку:
// creation code
await VisitModel.create(visitData, {
include: {
model: seqClient.models.Stage,
include: {
association: 'OperationType'
}
},
...params,
transaction: t
})
-
// creation code
await VisitModel.create(visitData, {
include: {
model: seqClient.models.Stage,
include: {
association: 'OperationTypeStage'
}
},
...params,
transaction: t
})
-
// creation code
await VisitModel.create(visitData, {
include: {
model: seqClient.models.Stage,
include: {
model: seqClient.models.OperationType
}
},
...params,
transaction: t
})
-
// creation code
await VisitModel.create(visitData, {
include: {
model: seqClient.models.Stage,
include: {
model: seqClient.models.OperationTypeStage
}
},
...params,
transaction: t
})
Для ясности это работает, но без каких-либо вставок в соединении стол:
// creation code
await VisitModel.create(visitData, {
include: {
model: seqClient.models.Stage,
},
...params,
transaction: t
})