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)
coalesce는 nil
이 아닌 첫 번째 매개변수를 반환합니다.
이를 위해서는 포인터를 제공해야 합니다. 그러나 주석의 코드 조각에서 볼 수 있듯이 포인터가 제공되지 않습니다. 따라서 모든 지정된 필드가 업데이트됩니다.
구체적으로 products
(또는 프로그램에서 부르는 이름) 유형은 다음과 같아야 합니다.
필드는 포인터로 정의된다는 점에 유의하세요.
그러면 다음과 같이 사용됩니다:
으아악stock
을 제외한 모든 필드가 nil
,除了 stock
之外,只有 stock
면 stock
만 데이터베이스에서 업데이트됩니다.
위 내용은 SQL COALESCE 함수가 GORM에서 작동하지 않습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!