✅ Sequelize에서 서브쿼리를 써야할 때!
// subQuery
const setSubQueryCustomer: CustomerSelectListQuery = {};
if (params.ttt) {
setSubQueryCustomer.where = {
...setSubQueryCustomer.where,
ttt: params.ttt,
};
}
return new Promise((resolve, reject) => {
AlarmList.findAndCountAll({
...setQuery,
attributes: { exclude: ['causeJson'] }, // 해당 필드 제외
include: [
{
model: Mobile,
attributes: MobileAttributesInclude,
},
{
model: C,
attributes: ['id', 'code'],
include: [
{
model: M,
attributes: ['id', 'code'],
include: [
{
model: Customer,
attributes: ['id', 'name', 'ccIdCompany'],
...setSubQueryCustomer,
},
],
},
],
},
✅ subQeuery라는 객체를 만듭니다.
const setSubQueryCustomer: CustomerSelectListQuery = {};
if (params.ttt) {
setSubQueryCustomer.where = {
...setSubQueryCustomer.where,
ttt: params.ttt,
};
}
이 객체에는 parameter에서 가져온 where문을 집어 넣습니다.
✅ include(Fk)인 객체 모델에다가 서브쿼리를 넣습니다.
AlarmList.findAndCountAll({
...setQuery,
attributes: { exclude: ['causeJson'] }, // 해당 필드 제외
include: [
{
model: Mobile,
attributes: MobileAttributesInclude,
},
{
model: C,
attributes: ['id', 'code'],
include: [
{
model: M,
attributes: ['id', 'code'],
include: [
{
model: Customer,
attributes: ['id', 'name', 'ccIdCompany'],
...setSubQueryCustomer,
},
],
},
],
},
AlarmList는 findAndCountAll ()을 합니다.
첫번째 include는 Mobile입니다.
두번째 include는 C입니다. C에서 M을 또 include하고 M에서 또 Customer를 include합니다.
즉, C -> M -> Customer로 종속관계가 되어있습니다.
include된 속성을 살펴봅시다.
model은 include된 객체를 의미합니다. sequelize에 설정된 table을 모델로 설정해줍니다.
attributes는 출력될 속성을 의미합니다. M을 예시로 보겠습니다. M안에 'id' 와 'code' 만 가져와서 출력하겠다는 의미 입니다.(select id, code ) 랑 똑같습니다.
728x90
'웹 > Nodejs' 카테고리의 다른 글
✅ [NodeJs] sequelize에서 관계설정할 때 column 이름과 reference 이름을 달리해야 한다! (0) | 2022.11.30 |
---|---|
✅ [NodeJs] Sequelize에서 delete가 안될 때 (0) | 2022.11.25 |
[NodeJs] package.json에서 @types가 붙는 이유는? (0) | 2022.11.22 |
[NodeJs] node v14 -> v18로 넘어왔는데 app.use()에서 에러가 납니다. (0) | 2022.11.21 |
[Nodejs] pnpm에서 tsc-watch 사용하기 (0) | 2022.11.19 |