es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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',
}
]
},
],
})

Tags:  

Answer

  1. Avatar for 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 ámbito includeBookingSessionAndUsers para incluir el ámbito includeStudentAndTutor pasándolo como argumento a la propiedad include.

    Así es como podemos lograrlo:

    includeBookingSessionAndUsers: (userId, includeStudentAndTutor) => ({
      include: [
        {
          model: sequelize.model('BookingSession'),
          where: {
            [Op.or]: [
              { studentId: userId },
              { tutorId: userId },
            ],
          },
          ...includeStudentAndTutor(), // Aquí podemos incluir el otro ámbito
        },
      ],
    }),
    

    Podemos ver que el ámbito includeBookingSessionAndUsers ahora acepta un argumento adicional includeStudentAndTutor, que es una función que devuelve la parte include del ámbito includeStudentAndTutor. Luego podemos usar el operador de propagación ... para agregar esta parte a nuestra propiedad include principal.

    Con esta modificación, ahora podemos ejecutar nuestra consulta y disfrutar de los beneficios de incluir el ámbito includeStudentAndTutor dentro de nuestro ámbito includeBookingSessionAndUsers.

Comments are closed.