概要
GolangのORマッパーとしてGORMがあります。
GORMを利用するときは、構造体を引数に渡してDBから値を取得します。
構造体は基本的にテーブルのカラムにあわせて定義すると思いますが、JOINなどをしたときには、構造体にフィールドを追加することがあります。
しかし、フィールドを追加したがために、INSERTのときにそんなカラムはないよ!!となったりします。
そういうとき、特定のフィールドを無視して欲しいですよね!という解決策を書いていきます。
今回の元の構造体
entities/user.go
package entities
type User struct {
ID uint `gorm:"primary_key"`
Name string `gorm:"not null"`
}
entities/user.go
package entities
type Article struct {
ID uint `gorm:"primary_key"`
UserID string `gorm:"not null"`
Title string `gorm:"not null"`
Content string `gorm:"not null"`
}
課題
今回、「Userに紐づく記事の数を取得したい。」というものがあった。
具体的には、Userの構造体に記事の数
のフィールド(**ArticleAmount
**フィールド)を追加して、データを取得したい。
そこで以下のように追加すると、DBからSELECTは取得できるが、UserデータをGORMでINSERTするときに、そんなカラムはないよ...!!と言われてしまう。
※新たに構造体を定義すればよいじゃん!といえばその通りだが、そのために新たな構造体を作るのもなんだかなぁという気持ちになっている。
entities/user.go
package entities
type User struct {
ID uint `gorm:"primary_key"`
Name string `gorm:"not null"`
ArticleAmount string
}
では、どうしよう...?
解決策
案外簡単で、`gorm:"-"`
を追加するだけで良い。
ドキュメントにはこちらに示してある。
entities/user.go
package entities
type User struct {
ID uint `gorm:"primary_key"`
Name string `gorm:"not null"`
ArticleAmount string `gorm:"-"`
}