sequelize include 모델 order

배병일 ㅣ 2023. 8. 8. 22:57

 


방법

const test = await T1.findOne({
	where: { id },
    	include: {
            model: T2,
            attributes: ["a"],
            include: {
                model: T3,
                attributes: ["b"],
        	},
    	},
})

T1 테이블, T2 테이블, T3 테이블이 있음.

 

T1 테이블과 T2 테이블이 관계 설정 되어 있고, T2 테이블과 T3 테이블이 관계 설정 되어 있음.

 

해당 코드에서 T3 테이블을 가져올때 "b"를 오름차순 또는 내림차순 정렬된 상태로 가져오기를 원함.

 

흔히 아는 DESC(내림차순), ASC(오름차순) 을 사용하면 될거라는 생각이 듬.

 


문제점

const test = await T1.findOne({
	where: { id },
        include: {
            model: T2,
            attributes: ["a"],
            include: {
                model: T3,
                attributes: ["b"],
                order: [[ 'b', 'DESC']],
        	},
    	},
})

T3 테이블을 Include한 곳에서

 

order 를 사용하여 "b" 를 DESC(내림차순) 정렬 하였지만 order가 전혀 먹히지 않음.

 

 

 

 


결과

const test = await T1.findOne({
	where: { id },
        include: {
            model: T2,
            attributes: ["a"],
            include: {
                model: T3,
                attributes: ["b"],
        	},
    	},
    	order: [[T2, T3, 'b', 'DESC']],
})

 

우리가 원했던 건 T1을 찾을 때이고, 여기서 T1을 찾을 때라는 조건이 발생하게 됨.

 

order 를 할 때도 T1을 찾을 때라는 조건에 부합하기 위해서

 

T1과 관계설정된 T2, T2와 관계설정된 T3에 있는 "b"를 찾아야 됨.

'Sequelize' 카테고리의 다른 글

Sequelize 쓰는 이유  (0) 2024.02.15
sequelize - 일괄 등록,수정 ( bulkCreate bulk update )  (0) 2023.08.09
sequelize로 mysql 컬럼 value 증가시키기  (0) 2023.07.27
squelize.sync  (0) 2023.07.25