Home  >  Q&A  >  body text

How can I execute this query in sequelize

<p><pre class="brush:php;toolbar:false;">SELECT * FROM item_master WHERE project_id IN (SELECT id FROM project_master WHERE workspace_id in (SELECT id FROM workspace_master WHERE company_id = 4));</pre> <p>How to execute this mysql query in sequelize - Node js without using original query? </p>
P粉354602955P粉354602955411 days ago452

reply all(2)I'll reply

  • P粉245003607

    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.

    reply
    0
  • P粉300541798

    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.

    reply
    0
  • Cancelreply