Здравствуйте. Столкнулся с ошибкой (или я туплю) в sequalize, методе bulkCreate (возвращает объекты с кривыми id).
Создаю теги с ассоциацией с задачей:
const tags = await Tag.bulkCreate(rawTags, { updateOnDuplicate: ['updatedAt'], include: [Task] });
await task.setTags(tags);
В теории, код должен добавлять ассоциации как для новых, так и существующих тегов. Что происходит на практике:
Допустим, в задачу нужно добавить теги aaa, bbb, ccc, ddd, но теги aaa, bbb, ccc уже есть в базе. В bulkCreate я передаю все теги сразу. В tags мы должны получить массив объектов, соответствующий rawTags и тут начинаются чудеса. Для новосозданных тегов данные возвращаются корректные (id= id из таблицы Tags), но для уже существующих id= id из таблицы TaskTags, соответственно, task.setTags(tags) добавляет ассоциации с несуществующими тегами.
Приведу данные из базы:
Tags
id|name
1|aaa
2|bbb
3|ccc
6|ddd
TaskTags
id|taskId|tagId
1|1|1
2|1|2
3|1|3
4|2|45|2|56|2|6
Обратите внимание, что тегов с таким tagId (4, 5) не существует, вместо этого TaskTags.tagId =
TaskTags.id