Дополнительные столбцы во многих соединительных таблицах не добавляются / обновляются в Sequelize - PullRequest
0 голосов
/ 26 марта 2020

Вот модели (многие ко многим)

Компания. js

module.exports = (sequelize, DataTypes) => {
  const Company = sequelize.define('Company', {
    company_name: DataTypes.STRING,
  }, {
    timestamps: true,
    underscored: true,
    tableName: 'company',
  });
    Company.belongsToMany(models.Goal, {
      through: 'company_goal_relation', foreignKey: 'company_id', as: 'goal'
    });
  };
  return Company;
};

Цель. js

module.exports = (sequelize, DataTypes) => {
  const Goal = sequelize.define('Goal', {
    goal_name: DataTypes.STRING,
  }, {
    timestamps: false,
    underscored: true,
    tableName: 'goal',
  });
  Goal.associate = function(models) {
    Goal.belongsToMany(models.Company, {
      through: 'company_goal_relation',
      foreignKey: 'goal_id',
      as: 'company',
    });
  };
  return Goal;
};

CompanyGoalRelation. js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const CompanyGoalRelation = sequelize.define('CompanyGoalRelation', {
    company_id: DataTypes.INTEGER,
    goal_id: DataTypes.INTEGER,
    objective: DataTypes.STRING,
    description: DataTypes.TEXT,
  }, {
    timestamps: false,
    underscored: true,
    tableName: 'company_goal_relation',
  });

  CompanyGoalRelation.associate = function(models) {
    CompanyGoalRelation.belongsTo(models.Company, { foreignKey: 'company_id' });
    CompanyGoalRelation.belongsTo(models.Goal, { foreignKey: 'goal_id' });
  };

  return CompanyGoalRelation;
};

Здесь я хочу добавить или обновить дополнительные столбцы соединительной таблицы. То, что я пробовал, приведено ниже.

const { goal, companyId } = req.body;
const company = await Company.findByPk(companyId);
    const goalInstance = await Goal.findOne({
      where: { id: goal.id },
    });
await company.addGoal(goalInstance, {
      through: {
        objective: goal.objective,
        description: goal.description,
      }
    });

Ошибка не возникла, и company_id , goal_id были успешно добавлены, но оба target и description были еще null.

В настоящее время я использую Sequelize (5.6.0) и PostgreSQL. Кто-нибудь может помочь? Спасибо!

1 Ответ

0 голосов
/ 26 марта 2020

Итак, как я уже сказал, я не знаю, как правильно настроить Sequelize в этом отношении, и я думаю, что это пустая трата времени. Что я хотел бы сделать, это просто выполнить необработанный запрос. Обратите внимание, что в вашем случае вы выполняете совершенно ненужный запрос к базе данных, сначала извлекая запись о компании по ее идентификатору, а затем выполняете еще один, чтобы создать отношение (2 запроса вместо 1 ...)

Таким образом, вы можете просто передать нужные поля отношений, скажем, из запроса ajax, в ваше приложение express (при условии, что это то, что вы используете):

const {companyId,goalId,objective,description} = req.body;

И затем выполните запрос:

db.query(`insert into company_goal_relation (company_id,goal_id , objective, description,createdAt,updatedAt) values (?,?,?,?,NOW(),NOW()) `,{
        replacements:[companyId,goalId,objective,description]
    })

Обратите внимание, что "db" - это объект секвелирования, который вы настроили в начале, вам нужно будет импортировать его из файла конфигурации / установки.

Конечно, это не «нормальный» способ продолжения, но я не вижу причин, почему это не должно быть сделано так, и тогда это конец истории: D

...