Go Gorm Preload without order by

2020. 5. 13. 10:17Tutorial & Training/Go

728x90

GORM 을 사용할 때 특정 쿼리 First, Preload 등을 사용하면 Order by 쿼리 가 붙게되는데

다좋은데 문제가 Gorm에서 부여된 Primary key (ID)로 조회를 하는데

테이블에 ID 컬럼이 존재하지 않으면 오류가 발생합니다.

 

 

이를 해결하기 위해서는 GORM에서 언급되는

Unscoped() 라는걸 사용해야 합니다.

 

db.Unscoped().First(&user, 1)

Order by 절 이 없는걸 확인할 수 있는데 하지만 여기서 Preload를 사용할 경우

 

db.Unscoped().Preload("Profile").First(&user, 1)

Order by가 Profile 테이블에 또 붙게됩니다.

 

이러한 경우에는 Preload에서 함수로 또 지정해줘야합니다..

 

 

db.Unscoped().Preload("Profile", func(db *gorm.DB) *gorm.DB{
	return db.Unscoped()
}).First(&user, 1)

return db.Unscoped() 영역에서 Preload에 대한 Orderby를 무시하게됩니다.

 

 

근데 Preload를 해도 딱히 Eager나 Lazy Load이런것도 안되는거같은데..

실제로 Preload나 Related를 사용해도 Join처럼 동작하는게 아니고 그냥 쿼리한번더 요청합니다...

 

 

728x90

'Tutorial & Training > Go' 카테고리의 다른 글

#01.Go - GraphQL 알아보기  (0) 2020.05.31
Go언어 ORM GORM의 크나큰 문제점  (0) 2020.05.15
Go.#3 / 패키지  (0) 2019.12.15
Go.#2 / Go언어 컴파일러 설치하기  (0) 2019.12.06
Go.#1 / Go언어 시작하기  (0) 2019.12.05