Sequelize Как вызвать scope внутри другого scope?
Собственно сам вопрос - как в описании scope для одной модели вызвать scope из другой модели?
У меня есть такой скоуп:
includeBookingSessionAndUsers: (userId) => ({
include: [
{
model: sequelize.model('BookingSession'),
where: {
[Op.or]: [
{ studentId: userId },
{ tutorId: userId },
],
}
},
],
}),
Мне необходимо внутри него вызвать следующий скоуп из другой модели:
includeStudentAndTutor: () => ({
include: [
{
model: sequelize.model('User'),
as: 'tutor',
},
{
model: sequelize.model('User'),
as: 'student',
}
]
}),
Так, чтобы в результате это было аналогично тому, как если бы у меня просто был один скоуп со вложенным инклюдом:
includeBookingSessionAndUsers: (userId) => ({
include: [
{
model: sequelize.model('BookingSession'),
where: {
[Op.or]: [
{ studentId: userId },
{ tutorId: userId },
],
},
include: [
{
model: sequelize.model('User'),
as: 'tutor',
},
{
model: sequelize.model('User'),
as: 'student',
}
]
},
],
})
Ответы (1 шт):
Задачу в итоге решил.
Данный скоуп остается без изменения
includeStudentAndTutor: () => ({
include: [
{
model: sequelize.model('User'),
as: 'tutor',
},
{
model: sequelize.model('User'),
as: 'student',
}
]
}),
Обратите внимание, что он описан для модели BookingSession
Наш второй скоуп, внутри которого будет вызываться includeStudentAndTutor описан в модели Conversations и вот его рабочее описание
includeBookingSessionAndUsers: (userId) => ({
include: [
{
model: sequelize.model('BookingSession'),
where: {
[Op.or]: [
{ studentId: userId },
{ tutorId: userId },
],
},
},
sequelize.model('BookingSession').scope('includeStudentAndTutor'),
],
}),
которое возвращает результат аналогичный тому, как если бы этот скоуп не использовал скоуп includeStudentAndTutor, а был бы просто описан таким образом:
includeBookingSessionAndUsers: (userId) => ({
include: [
{
model: sequelize.model('BookingSession'),
where: {
[Op.or]: [
{ studentId: userId },
{ tutorId: userId },
],
},
include: [
{
model: sequelize.model('User'),
as: 'tutor',
},
{
model: sequelize.model('User'),
as: 'student',
}
]
},
],
})