Мне показалось сбивающим с толку настройку отношения «многие ко многим» (n: n) между двумя отношениями (или таблицами) с помощью Sequelize ORM, и поэтому после того, как я смог его взломать, я подумал, что было бы разумно создать простое руководство, поэтому , это.

Во-первых, позвольте мне описать сценарий: существует много users, и каждый user может принадлежать множеству groups или вообще не принадлежать group, и каждый group может содержать много users или не содержать users вообще. Итак, да, это Many-to-Many связь между users таблицей и groups таблицей.

Мое мнение

Для достижения этой взаимосвязи мне нужна join таблица, и я назову ее GroupUsers. Это будет таблица, описывающая отношения между users и groups. В нем будут два столбца: userId и groupId, которые являются внешними ключами, ссылающимися на обе таблицы (пользователей и группы) соответственно.

Код

Модель пользователей

Игнорируйте другие части кода, я добавил их только ради этого. Сосредоточьтесь на блоке кода Users.associate. Чтобы создать нашу ассоциацию, нам нужно объявить ее, используя этот блок кода, именно так, как есть. Я думаю, что это достаточно ясно, что он делает, нет необходимости объяснять это.

Единственная причина, по которой мне пришлось объявить эту ассоциацию, - это то, что когда я получаю пользователя, я также получаю список групп, к которым он принадлежит. Вот как это выглядит с ассоциацией:

За кулисами указанного выше объекта json:

Контроллер пользователей

Итак, как вы можете видеть, ассоциации экономят вам много кода, без ассоциаций мне вместо этого пришлось бы запросить таблицу Users, а затем запросить таблицу GroupUsers, а затем запросить таблицу Groups очень похожим на спагетти способом.

Баллы, которые нужно забрать домой:

  • Столкнувшись с подобным сценарием, создайте join таблицу.
  • Затем создайте связь между объединенными таблицами.
  • Удачи с include опциями.

[ОБНОВИТЬ]

Прошло некоторое время с тех пор, как я написал эту статью, и за это время я понял, что было бы намного полезнее, если бы я обновил статью на основе комментариев читателей. Вот как выглядят модели GroupUsers и Groups:

Модель GroupUsers

Групповая модель