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.

Seleccionar clientes con pedidos en Sequelize ORM.

Supongamos que tengo la base de datos tradicional de clientes y pedidos.

Necesito una consulta que devuelva solo aquellos clientes con pedidos en Sequelize ORM.

En SQL sería algo como

SELECT DISTINCT name FROM Customers c INNER JOIN Orders o ON o.customerId = c.id

Pero en Sequelize, sin declaraciones en bruto, ¿cómo sería?

Rafael

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el mismo resultado con Sequelize ORM, primero puedes definir la relación entre los modelos de Clientes y Pedidos en el esquema de tu base de datos, y luego utilizar los métodos de consulta de Sequelize para recuperar la información deseada.

    Suponiendo que ya has establecido las asociaciones adecuadas entre los dos modelos, puedes utilizar el método findAll con la opción include para filtrar solo los clientes con pedidos asociados:

    const clientesConPedidos = await Customer.findAll({
      include: [{ model: Order }]
    });
    
    // clientesConPedidos será un array de instancias de Cliente que tienen al menos un Pedido asociado
    

    Esto recuperará todos los clientes con pedidos asociados, incluyendo cualquier nombre de cliente duplicado. Para eliminar duplicados y solo devolver los nombres de clientes con pedidos, puedes usar la opción distinct en la consulta:

    const clientesConPedidos = await Customer.findAll({
      include: [{ model: Order }],
      attributes: ['name'],
      distinct: true
    });
    
    // clientesConPedidos será un array de objetos simples con solo el atributo name de clientes únicos con pedidos
    

    Esto debería darte el resultado esperado sin recurrir a consultas SQL en bruto.

Comments are closed.