Как использовать Sequelize belongsToMany ассоциации?

у меня есть проекты и пользователей.

пользователь может иметь много проектов.

проект может иметь несколько пользователей.

Я попытался смоделировать это с помощью ассоциации belongsToMany.

на моем сервере я определил такие ассоциации:

user.belongsToMany(project, {
  through: 'writer_of_project'
  foreign-key: 'user'
  as: projects
});

project.bbelongsToMany(user, {
  through: 'writer_of_project'
  foreign-key: 'project'
  as: 'writers'
});

на моем клиенте это выглядит так:

user: {
  id:       1,
  ...
  projects: [1,2,3]
}

project: {
  id:     1,
  ...
  writers: [1,4,5]
}

на сервере ассоциации требуется третья таблица для хранения ассоциации и Sequelize, похоже, не позволяет мне включить соответствующие модели из него.

если я запускаю project.find(1) С include:[user] Я

пользователь не связан с проектом!

если я попытаюсь поместить проект из приведенного выше примера в метод update. Атрибут users просто игнорируется (я ожидал, что проект.setUsers (projectUpdate.пользователи происходят в фоновом режиме).

каков правильный способ борьбы с загрузкой и обновлением этих ассоциации?

1 ответов


когда вы указываете псевдоним (as) ассоциации, вы должны обеспечить, чтобы включить, а также:

project.belongsToMany(user, {
  through: 'writer_of_project'
  foreign-key: 'project'
  as: 'writers'
});

project.find({
  where: { id: 1 },
  include: [ { model: User, as: 'writers' } ]
});

или вы можете сохранить ассоциацию:

Project.writersAssociation = project.belongsToMany(user, {
  through: 'writer_of_project'
  foreign-key: 'project'
  as: 'writers'
});

project.find({
  where: { id: 1 },
  include: [ project.writersAssociation ]
});