LoginSignup
4
0

More than 5 years have passed since last update.

GORMでINSERT時に構造体の特定のフィールドを無視する方法

Posted at

概要

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:"-"`
}
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0