usersテーブルにcreate処理を行う際、Auto Incrementを指定しているuser_idカラムの値が一回のSQLで取れず苦戦してたのですが、Goの構造体の書き方を修正したらusers_idの値も取れました。
忘れないようにメモします。
Auto Incrementが上手くいった時の構造体の定義は以下です。
type User struct { UserID *int `gorm:"column:staff_id;primary_key" json:"user_id";primary_key"` UserName *string `json:"user_name"` UserPassword *string `json:"user_password"` EmailAddress *string `json:"mail_address"` Note *string `json:"note"` IconImage *string `json:"icon_image"` }
上記の設定で以下のコードを実行すると、Create(&data)の後にdata.UserIDにDBに登録された値が入っていました。
func AddNewUser(param domain.RequestParam) (domain.ResponseParam, error) { db := db.CreateDBConnection() defer db.Close() data := domain.User{ UserName: param.UserName, UserPassword: param.Password, EmailAddress: param.EmailAddress, Note: param.Note, // IconImageは未実装 IconImage: nil, } err := db.Table("users"). Create(&data).Error if err != nil { return domain.ResponseParam{}, err } res := domain.ResponseParam{ UserID: data.UserID, UserName: data.UserName, Note: data.Note, IconImage: data.IconImage, } return res, nil }
前回上手くいかなかった時はcolumn:staff_idの部分を書いていなかったので、それが原因なのかと考えてますが、詳細まではわかってないです。
GormというORマッパーを使用しているのでGormのソースコードを読んでみたら何かわかるかも知れませんが、時間がかかりそうなのでそれは後回しにします。
とりあえず一つ問題解決できたので良かったです。
ユーザー新規登録のAPIでユーザー登録のSQLとユーザーIDだけ取得するSQLの二つに分けていましたが、一回のSQLで要件を満たせるようになったのでコード量を減らせました。