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.

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.

Tags:  

Answer

  1. Avatar for 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:

    static getPagesForProfession(professionID) {
      return Page.findAll({
        where: {
          [Op.or]: [
            { pageType: "generic" },
            {
              pageType: "specific",
              "$Professions.id$": professionID
            }
          ]
        },
        include: [
          {
            model: sequelize.models.Profession,
            as: "Professions"
          }
        ]
      });
    }
    

    En la cláusula where, usamos Op.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 modelo Profession en la cláusula include y agregar una restricción en su campo id para que coincida con el parámetro professionID.

    Tenga en cuenta que aún necesitamos incluir el modelo Profession en la cláusula include 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.

Comments are closed.