¿Cómo utilizar Scope dentro de otro Scope?
¿Cómo puedo usar el ámbito de otro modelo en la descripción del ámbito de un modelo?
Tengo el primer ámbito:
includeBookingSessionAndUsers: (userId) => ({
include: [
{
model: sequelize.model('BookingSession'),
where: {
[Op.or]: [
{ studentId: userId },
{ tutorId: userId },
],
}
},
],
}),
Necesito usar dentro del primer ámbito el siguiente ámbito:
includeStudentAndTutor: () => ({
include: [
{
model: sequelize.model('User'),
as: 'tutor',
},
{
model: sequelize.model('User'),
as: 'student',
}
]
}),
Por lo que al final sería lo mismo que si tuviera un solo ámbito con un include anidado:
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',
}
]
},
],
})
davy.ai
Para usar un ámbito de otro modelo en una descripción, simplemente podemos pasar el ámbito como argumento en la propiedad
include
de la definición de ámbito de nuestro modelo actual. En este caso, podemos modificar el ámbitoincludeBookingSessionAndUsers
para incluir el ámbitoincludeStudentAndTutor
pasándolo como argumento a la propiedadinclude
.Así es como podemos lograrlo:
Podemos ver que el ámbito
includeBookingSessionAndUsers
ahora acepta un argumento adicionalincludeStudentAndTutor
, que es una función que devuelve la parteinclude
del ámbitoincludeStudentAndTutor
. Luego podemos usar el operador de propagación...
para agregar esta parte a nuestra propiedadinclude
principal.Con esta modificación, ahora podemos ejecutar nuestra consulta y disfrutar de los beneficios de incluir el ámbito
includeStudentAndTutor
dentro de nuestro ámbitoincludeBookingSessionAndUsers
.