Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
106 views
in Technique[技术] by (71.8m points)

javascript - How to Query `And ( OR )` using TypeORM?

I want to run the following query using TypeORM.

SELECT 
  *
FROM 
  user 
WHERE 
  deleted = false 
  AND classId = `classId` 
  AND (
    parentId = `entityId` 
    OR teacherId = `entityId` 
    OR lessonId = `entityId`
  )

I did as follows and I had to write the same piece of code several times.

const result = await userRepo.find({
  where: [
    {
      deleted: false,
      classId: 'classId',
      parentId: 'entityId',
    },
    {
      deleted: false,
      classId: 'classId',
      teacherId: 'entityId',
    },
    {
      deleted: false,
      classId: 'classId',
      lessonId: 'entityId',
    }
  ]
});

what this actually runs as query is:

SELECT 
  *
FROM 
  user 
WHERE 
  (deleted = false AND classId = `classId` AND parentId = `entityId`)
  OR (deleted = false AND classId = `classId` AND teacherId = `entityId`)
  OR (deleted = false AND classId = `classId` AND lessonId = `entityId`)

Can I use deleted and classId only once to run this query using find from repository?

question from:https://stackoverflow.com/questions/66051534/how-to-query-and-or-using-typeorm

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Just for an improvement for your code, I did this:

const commonConditions = {
    deleted: false,
    classId: `classId`
};

const result = await userRepo.find({
  where: [
    {
      parentId: 'entityId',
      ...commonConditions,
    },
    {
      teacherId: 'entityId',
      ...commonConditions,
    },
    {
      lessonId: 'entityId',
      ...commonConditions,
    }
  ]
});

Hope that works!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...