createQueryBuilder("user")
.where("user.registered = :registered", { registered: true })
.andWhere(new Brackets(qb => {
qb.where("user.firstName = :firstName", { firstName: "Timber" })
.orWhere("user.lastName = :lastName", { lastName: "Saw" })
}))
다음의 쿼리와 같다
SELECT ... FROM users user WHERE user.registered = true AND (user.firstName = 'Timber' OR user.lastName = 'Saw')
WHERE (status = ready and inspectionStatus = done) AND (status = waiting and inspectionStatus = consent)
=> 다음과 같아야 제대로 작동한다.
filterStatus.forEach((val, index) => {
if (filterStatus.indexOf(val) === 0) { => 첫번째 조건은 andWhere
query.andWhere(
new Brackets((qb) => {
qb.where('receiving.status = :status', { status: val.status });
if (val.inspectionStatus) {
qb.andWhere('receiving.inspectionStatus = :inspectionStatus', {
inspectionStatus: val.inspectionStatus,
});
}
})
);
} else {
query.orWhere( => 2번째 조건부터는 orWhere
new Brackets((qb) => {
qb.where(`receiving.status = :status${index}`, { [`status${index}`]: val.status });
if (val.inspectionStatus) {
qb.andWhere(`receiving.inspectionStatus = :inspectionStatus${index}`, {
[`inspectionStatus${index}`]: val.inspectionStatus,
});
}
})
);
}
});
}
참고:
https://typeorm.io/#/select-query-builder/adding-where-expression