> 백엔드 개발 > Golang > SQL COALESCE 함수가 GORM에서 작동하지 않습니다.

SQL COALESCE 함수가 GORM에서 작동하지 않습니다.

PHPz
풀어 주다: 2024-02-10 14:57:10
앞으로
1003명이 탐색했습니다.

SQL COALESCE 函数不适用于 GORM

php 편집기 Xinyi가 SQL의 COALESCE 함수를 소개하기 위해 왔습니다. COALESCE 함수는 매개변수 목록에서 NULL이 아닌 첫 번째 값을 반환하는 데 사용됩니다. 하지만 GORM(Go 언어 ORM 프레임워크)을 사용할 때 COALESCE 함수가 몇 가지 문제를 일으킬 수 있다는 점에 유의해야 합니다. 이는 GORM이 쿼리문을 기존 SQL문과 다르게 처리하기 때문입니다. 따라서 GORM을 사용할 때 COALESCE 함수에 문제가 발생하면 다른 솔루션을 고려해 볼 수 있습니다.

질문 내용

db.model(&domain.products{}).where("product_code", product.product_code).
updates(map\[string\]interface{}{
"product_image": gorm.expr("coalesce(?, products.product_image)", product.product_image),
"size":          gorm.expr("coalesce(?, products.size)", product.size),
"color":         gorm.expr("coalesce(?, products.color)", product.color),
"unit_price":    gorm.expr("coalesce(?, products.unit_price)", product.unit_price),
"stock":         gorm.expr("coalesce(?, products.stock)", product.stock),
})
로그인 후 복사

테이블을 업데이트할 때 null 삽입을 관리하기 위한 gorm 쿼리입니다. 새 값(들어오는 값)이 null인 경우 테이블의 기존 값을 유지하여 테이블을 업데이트하고 싶습니다. 하지만 내 코드에서는 테이블이 정상적으로 업데이트됩니다. 이는 null 값과 null이 아닌 값이 모두 정상적으로 업데이트된다는 의미입니다. 누군가가 나를 도울 수 있기를 바랍니다

gorm raw 쿼리도 시도했습니다. 하지만 그것도 작동하지 않습니다

ar.DB.Exec("UPDATE products SET size = COALESCE(?, size) WHERE product_code = ?", product.Size, product.Product_Code)
로그인 후 복사

Solution

coalesce는 nil이 아닌 첫 번째 매개변수를 반환합니다.

이를 위해서는 포인터를 제공해야 합니다. 그러나 주석의 코드 조각에서 볼 수 있듯이 포인터가 제공되지 않습니다. 따라서 모든 지정된 필드가 업데이트됩니다.

구체적으로 products(또는 프로그램에서 부르는 이름) 유형은 다음과 같아야 합니다.

으아악

필드는 포인터로 정의된다는 점에 유의하세요.

그러면 다음과 같이 사용됩니다:

으아악

stock을 제외한 모든 필드가 nil,除了 stock 之外,只有 stockstock만 데이터베이스에서 업데이트됩니다.

위 내용은 SQL COALESCE 함수가 GORM에서 작동하지 않습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿