Как мне написать этот необработанный запрос Postgres в sequelize

#sql #node.js #postgresql #sequelize.js

#sql #node.js #postgresql #sequelize.js

Вопрос:

У меня есть этот необработанный запрос postgres, я хотел написать его в Sequelize. Как мне это сделать, поскольку у меня меньше идей о написании запросов с объединениями в Sequelize. Я создал модели и ассоциации.

Это модели и ассоциации.

 TestParticipant.hasMany(ParticipantHistory, {
    sourceKey: "id",
    foreignKey: "participantId",
    as: "paticipantStatuses"
})

ParticipantHistory.belongsTo(TestParticipant, {
    foreignKey: "participantId",
    as: "paticipantStatuses"
})
  

Это необработанный запрос, который я хочу преобразовать в запрос Sequelize

 SELECT participant_histories.participant_id,
        participant_histories.created_at,participant_histories.previous_status,
        participant_histories.status,test_participants.test_type_id,test_participants.id,
        test_participants.email,test_participants.scheduled_at,test_participants.valid_till,
        test_participants.is_proctored 
FROM test_participants 
  INNER JOIN participant_histories ON test_participants.id=participant_histories.participant_id 
WHERE user_id='${userId}' 
AND participant_histories.status='${activity}' 
AND participant_histories.created_at>='${isoDate}'
  

Комментарии:

1. Сначала создайте модели и ассоциации и добавьте их все в post, чтобы мы могли понять отношения между participant_histories и test_participants . Таким образом, мы можем порекомендовать вам, как преобразовать этот необработанный SQL-запрос в запрос Sequelize

2. Я сделал это

3. Где находится схема модели для обеих вышеуказанных таблиц. Это не будет проще, не зная соотношения между таблицами

Ответ №1:

Поскольку я не вижу определений моделей в сообщении, я предлагаю только что-то вроде этого:

 // First of all you should correct an alias for TestParticipant like this
ParticipantHistory.belongsTo(TestParticipant, {
    foreignKey: "participantId",
    as: "paticipant"
})

const rows = await ParticipantHistory.findAll({
  raw: true,
  attributes: ['participant_id', 'created_at', 'previous_status', 'status'],
  where: {
    status: activity,
    created_at: {
      [Op.gte]: isoDate
    }
  },
  include: [{
    required: true // this turns into INNER JOIN
    model: TestParticipant,
    attributes: ['test_type_id', 'id', 'email', 'scheduled_at', 'valid_till', 'is_proctored'],
    as: 'participant',
    where: {
      user_id: userId
    }
  }]
})