Как получить данные с только что вставленными данными с помощью Sequelize в PostgreSql? - PullRequest
3 голосов
/ 11 января 2020

Я хочу получить обновленные значения таблицы после добавления пользователя в свою таблицу "WOD". Например, у меня есть 2 пользователя в моей таблице WOD, и после добавления третьего пользователя я хочу вернуть ответ клиенту с только что вставленными данными (третий парень). Но теперь я могу вернуть только первых 2 пользователей, потому что не могу принять обновленные значения. Конечно, я могу сделать другой запрос, чтобы получить обновленные значения таблицы после вставки, но есть ли лучшее решение? Вот мои коды;

const addUser = async (req, res) => {
 try {
const { userId, wodId } = req.body;

if (!userId || !wodId) {
  res.status(400).send({ status: false, message: 'need userId and wodId' });
}

const wod = await Wod.findByPk(wodId, {
  include: [
    {
      model: User,
      as: 'Participants',
      through: { attributes: [] }
    }
  ]
});
//check capacity if full.
if (wod.Participants.length >= wod.capacity) {
  res
    .status(403)
    .send({ status: false, message: 'Capacity of this class is full!' });
}
const result = await wod.addParticipants(userId);

res.status(201).json({ status: !!result, wod });
} catch (error) {
res.status(500).send({ status: result, message: error.message });
console.log(error.message);
  }
};

1 Ответ

3 голосов
/ 11 января 2020

В результате ассоциации «многие ко многим» sequelize.syn c сгенерирует для нас несколько функций . Вы используете функцию addParticipants, и она возвращает массив, добавленный в таблицу ассоциации (userwod).

В этом массиве вы найдете несколько полей идентификаторов (полей таблицы соединений), потому что вы просто запускаете вот так INSERT INTO 'user_wods' ('user_id''wod_id') VALUES (2,1). Если вы хотите вернуть информацию о добавленном пользователе, вам нужно запустить SELECT * FROM 'user' WHERE 'id'=2.

. Вы должны вызвать функцию перезагрузки, чтобы получить третьего парня.

await wod.reload()
...