Sequelize: ¿Cómo buscar en una asociación solo en uno de los casos?
Estoy tratando de buscar dos tipos de entradas:
- Páginas que tienen el tipo de página “genérico”
- Todas las páginas que tienen el tipo de página “específico” Y professionId igual al parámetro que estoy pasando.
La única forma que encontré fue hacer dos solicitudes:
static getPagesForProfession(professionID) {
return Promise.all([
Page.findAll({
where: {
pageType: "genérico",
},
}),
Page.findAll({
where: {
pageType: "específico",
},
include: [
{
model: sequelize.models.Profession,
as: "Professions",
where: {
id: professionID,
},
},
],
}),
]);
}
¿Hay alguna manera de hacerlo en una sola solicitud?
Page
está asociado a Profession
en una relación de muchos a muchos con una tabla de unión.
davy.ai
Sí, es posible lograr el resultado deseado en una sola solicitud usando el operador
Op.or
de Sequelize para combinar las dos condiciones.Aquí hay un ejemplo de implementación:
En la cláusula
where
, usamosOp.or
para especificar que queremos encontrar páginas que cumplan cualquiera de las dos condiciones.La primera condición verifica las páginas con
pageType
igual a"generic"
.La segunda condición verifica las páginas con
pageType
igual a"specific"
, y utiliza la sintaxis"$Professions.id$"
para acceder al modeloProfession
en la cláusulainclude
y agregar una restricción en su campoid
para que coincida con el parámetroprofessionID
.Tenga en cuenta que aún necesitamos incluir el modelo
Profession
en la cláusulainclude
de la consulta para asegurarnos de que la unión se realice correctamente.Con esta implementación, ahora podemos obtener ambos tipos de páginas en una sola solicitud.