P粉2450036072023-09-06 00:38:24
If your model structure is like item_master
has many project_master
, and project_master
has many workspace_master
, then the following sequelize query will Applied together with async/await
.
As I edit my answer. As you said in your comments you have model structure like workspace has many projects and project has many projects. Then the Sequelize query will look like:
const getResult = async (workpace_id, company_id = 4) => { const result = await workspace_master.findAll({ subQuery: false, include: [ { model: project_master, as: 'project_masters', // this is your alias defined in model attributes: ['id','foo','bar'], include: [ { model: item_master, as: 'item_masters', // this is your alias defined in model attributes: ['id','foo','bar'] } ] } ], where: { id: workspace_id, company_id: company_id } }); if(!result || !result.length) return res.send('Something went wrong!'); return res.send(result); }
Try it now, I hope this solves your problem.
P粉3005417982023-09-06 00:00:17
const item = await Item.findAll({ where: { status: { [Op.ne]: 99 }, '$project.workspace.company_id$': { [Op.eq]: req.user.companyId } }, include: { model: Project, as: 'project', attributes: ['id'], include: { model: Workspace, as: 'workspace', attributes: ['id', 'companyId'], where: { companyId: req.user.companyId }, }, } })
This is working the way I want.