#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-запрос в запрос Sequelize2. Я сделал это
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
}
}]
})