SQLx を使用したネストされた構造体のスキャン
データベース操作の領域では、ネストされた構造体をデータベース エンティティにスキャンすることが課題となる場合があります。次のシナリオを考えてみましょう:
DB モデルが与えられた:
type Customer struct { Id int `json:"id" db:"id"` Name string `json:"name" db:"name"` Address Address `json:"adress"` } type Address struct { Street string `json:"street" db:"street"` City string `json:"city" db:"city"` }
難問:
データを入力しようとしている次のコードを使用した Customer 構造体は、*models.Customer の番地目的地フィールドが次のとおりであることを示すエラーで失敗します。
customer := models.Customer{} err := db.Get(&customer, `select * from users where>
解決策:
SQLx は、埋め込み構造体を使用してネストされた構造体をスキャンするための強力なソリューションを提供します。 Address を個別の db タグを持つフィールドとして宣言する代わりに、Customer:
type Customer struct { Id int `json:"id" db:"id"` Name string `json:"name" db:"name"` Address }
に埋め込むことができます。構造体を埋め込むことで、Address フィールドは Customer にプロモートされ、親から db タグを受け取ります。 SQLx は、これらのフィールドにクエリ結果から直接値を入力します。
重要な注意事項:
このアプローチではスキャンが簡素化されますが、構造体の JSON 出力も平坦化されます。元のネストされた構造を保持するには、データベース構造体をターゲットの型に再マップすることを検討してください。
以上がSQLx はデータベース クエリでのネストされた構造体のスキャンをどのように効率的に処理できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。