tengo dos modelos
Unidades y filtros que están relacionados con la asociación M:N a través de la tabla unit_filter
this.belongsToMany(Unit, { through: "unit_filter", as: "units", }); this.belongsToMany(Filter, { through: 'unit_filter', as: 'filters', });
El objetivo es buscar unidades que tengan más de 1 filtro asociado y condición.
let result = await Unit.findAll({ include: [ { model: Filter, where: { id: { [Op.and] : [2,252,4,80] } }, as: 'filters', }, ], });
Lo anterior solo funciona si solo hay una identificación en la matriz que no tiene ningún sentido.
Seqeulize estados de documentación
Post.findAll({ where: { [Op.and]: [{ a: 5 }, { b: 6 }], // (a = 5) AND (b = 6) } })
Entonces, el código que tengo debería funcionar teóricamente. También probé con
where: { [Op.and] : [{id:2},{id:252},{id:4},{id:80}] }
lo que da como resultado obtener todos los elementos de la base de datos. Ni siquiera le importa la condición de dónde en este caso.
Sería de gran ayuda si alguien me señala en la dirección correcta.
Necesita usar Sequelize.literal
con una subconsulta en la opción where
para filtrar unidades que tienen más de 1 filtro porque simplemente indicando varios ids de filtros obtendrá unidades que tienen uno de los filtros indicados (del 1 al N).
let result = await Unit.findAll({ where: Sequelize.where( Sequelize.literal('(SELECT COUNT(*) FROM unit_filter as uf WHERE uf.unit_id=unit.id AND uf.filter_id in ($filter_ids))'), Op.gt, '1'), bind: { filter_ids: [2,252,4,80] } });