Sequelize Как сохранить модель с ассоциацией hasMany?

У меня две модели Job и Contact. Работа может иметь много контактов. Вот модальный.

Работа

module.exports = (sequelize, DataTypes) => {
  const Job = sequelize.define("Job", {
    job_name: DataTypes.STRING,
    due_date: DataTypes.DATE,
    assigned_hours: DataTypes.INTEGER,
    descriptions: DataTypes.STRING
  });
  Job.associate = function(models) {
    // associations can be defined here
    Job.hasMany(models.Contact, { foreignKey: "job_id" });
  };
  return Job;
};

Контакт

module.exports = (sequelize, DataTypes) => {
  const Contact = sequelize.define(
    "Contact",
    {
      organization_name: DataTypes.STRING,
      contact_person: DataTypes.STRING,
      email: DataTypes.STRING,
      phone: DataTypes.STRING,
      // Group can only be either client,contact or contractor
      group: DataTypes.STRING,
      sub_group: DataTypes.STRING,
      instruction: DataTypes.STRING
    },
    {}
  );

  return Contact;
};

В моем приложении контакт создается отдельно, и пользователь просто выбирает контакт при создании задания. Итак, что мне нужно сделать, чтобы связать уже созданный контакт с заданием? Я прочитал документы, но я не могу получить четкое представление. Должен ли я сделать что-то вроде newJob.setContacts. Мне нужно передать весь объект контакта или только идентификатор контакта (newJob.setContacts(['1','2'])?


person Unity Hour    schedule 13.06.2019    source источник


Ответы (1)


Ну, во-первых, ваша контактная модель на самом деле даже не имеет столбца внешнего ключа, который вы использовали для hasMany... job_id... это на самом деле отношения многие ко многим, которые вы хотите использовать? Может ли у задания быть много контактов, а контакт может принадлежать нескольким заданиям???

person Greg Belyea    schedule 15.06.2019
comment
У вас должен быть столбец идентификаторов для обеих таблиц и таблица соединений в вашей базе данных... таблица соединений должна состоять из идентификаторов обеих записей. Затем вы должны смоделировать эту таблицу соединений и включить имя модели в отношение принадлежности к многим. как на модели Job, так и на модели Contact - person Greg Belyea; 15.06.2019
comment
Попробуйте, и если вам нужна помощь, отправьте сюда код того, что вы пытаетесь сделать, и я помогу. - person Greg Belyea; 15.06.2019