構造体内の構造体: 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
解決策: Embedded Structs を採用する
この問題を解決する鍵は、SQLX のディープ スキャン機能を理解することにあります。ドキュメントが示唆しているように、構造体の埋め込みをサポートし、そのフィールドを親構造体にプロモートします。これを実現するには、Address を Customer:
type Customer struct { Id int `json:"id" db:"id"` Name string `json:"name" db:"name"` Address Address }
に埋め込むだけです。Address フィールド自体の db タグは別個のエンティティではなくなったため、削除したことに注意してください。
注意: フラット化JSON 出力
ただし、Address を埋め込むと Customer 構造体の JSON 出力がフラット化されます。 Name と City の両方が直接プロパティになりました:
{ "id": 1, "name": "foo", "street": "bar", "city": "baz" }
可能な代替手段
これが望ましくない場合は、いくつかの代替アプローチがあります:
以上がSQLX を使用してネストされた構造体を効果的にスキャンするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。