Open benjavicente opened 2 years ago
Hola. DeberÃas poder lograr lo que planteas juntando nested eager loading con especificar atributos en la asociación (especÃficamente la parte que dice options.include[].attributes
):
await ctx.orm.Persona.findByPk(personaId, {
include: {
model: ctx.orm.Auto,
include: {
// Nested model with specific attributes
}
}
});
Este artÃculo también puede ayudarte si con lo anterior no es suficiente para lo que estás buscando.
¿En ese caso la tabla intermediaria tendrÃa que ser un modelo?
await ctx.orm.Persona.findByPk(personaId, {
include: {
model: 'Auto',
include: {
model: 'PasajeroAuto',
}
}
});
Edit: mi meta serÃa evitar joins innecesarios en la consulta, el SQL que busco realizar es algo asÃ:
SELECT AutosDelUsuario.*, pasajero.id
FROM (
SELECT Auto.*
FROM Auto, DuenioAuto
WHERE Auto.id = DuenioAuto.autoId
AND DuenioAuto.usuarioId = :idDelUsuario
) AS AutosDelUsuario, PasajeroAuto
WHERE AutosDelUsuario.id = PasajeroAuto.autoId
para que quede un objeto de más o menos siguiente formato:
[
{
id: 1,
color: "azul",
patente: "XYZ",
idPasajeros: [4, 49, 73]
}
]
Pero si no se puede hacer "limpiamente" con Sequelize, me quedo con lo más sencillo nomás.
No es necesario que la tabla intermedia sea un modelo. Si especificas model
dentro de include
como string (y no con ctx.orm.myModel
) el valor debiese corresponder al nombre de la tabla directamente.
Sobre el caso particular que necesitas, no sé realmente si se puede llegar a algo como lo que necesitas con métodos de Sequelize solamente. Tal vez podrÃas llegar a algo cercano como:
[
{
id: 1,
color: "azul",
patente: "XYZ",
pasajeros: [
{
id: 4,
},
{
id: 49,
},
{
id: 73,
}
],
}
]
Si eso no te sirve, o derechamente no puedes llegar a algo asÃ, entonces una raw query serÃa la opción.
Hola! 👋
¿Cómo se puede consultar los ids de una tabla de unión sin hacer una unión con las entidades?
Por ejemplo, con este esquema:
Con el id de una persona, me gustarÃa buscar todo vehÃculo que tiene la persona y una lista de ids de los pasajeros, si cargar el objeto de cada pasajero.
Lo único que he encontrado es lo contrario a lo que quiero 😅