結構中的結構:SQLX 進階掃描指南
使用SQLX 時,您可能會遇到將資料掃描到巢狀結構中的挑戰。讓我們考慮這個範例:
type Customer struct { Id int `json:"id" db:"id"` Name string `json:"name" db:"name"` Address Address `json:"adress"` // Oops, missing embedded property } type Address struct { Street string `json:"street" db:"street"` City string `json:"city" db:"city"` }
嘗試使用此定義掃描資料時,您將遇到以下錯誤:
missing destination name street in *models.Customer
解決方案:擁抱嵌入式結構
解決這個問題的關鍵在於理解SQLX的深度掃描能力。如文件所示,它支援嵌入結構,將其欄位提升到父結構中。要實現此目的,只需將地址嵌入到客戶中即可:
type Customer struct { Id int `json:"id" db:"id"` Name string `json:"name" db:"name"` Address Address }
請注意,我們刪除了地址字段自己的 db 標籤,因為它不再是單獨的實體。
警告:扁平化JSON 輸出
但是,嵌入位址會扁平化 Customer 的 JSON 輸出struct,因為 Name 和 City現在都是直接屬性:
{ "id": 1, "name": "foo", "street": "bar", "city": "baz" }
可能的替代方案
如果不需要這樣做,有幾種替代方法:
以上是如何使用 SQLX 有效掃描巢狀結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!