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

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

PHPz
PHPz앞으로
2024-02-10 14:57:10967검색

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으로 문의하시기 바랍니다. 삭제