web-dev-qa-db-ja.com

Golang GormでUUIDをどのように実行しますか?

私は次のモデルを持っています...

type User struct {
    ID        string  `sql:"type:uuid;primary_key;default:uuid_generate_v4()"`
    FirstName string `form:"first_name" json:"first_name,omitempty"`
    LastName  string `form:"last_name" json:"last_name,omitempty"`
    Password  string `form:"password" json:"password" bindind:"required"`
    Email     string `gorm:"type:varchar(110);unique_index" form:"email" json:"email,omitempty" binding:"required"`
    Location  string `form:"location" json:"location,omitempty"`
    Avatar    string `form:"avatar" json:"avatar,omitempty"`
    BgImg     string `form:"bg_img" json:"bg_img,omitempty"`
    CreatedAt time.Time
    UpdatedAt time.Time
    DeletedAt time.Time
}

私はいくつかの異なる方法を試しましたが、この方法では(pq: relation "users" does not exist)がスローされます。関連するモデルはありません。文字通り、その1つのモデルだけです。

使ってみました...

func (user *User) BeforeCreate(scope *gorm.Scope) error {
    scope.SetColumn("ID", uuid.NewV4())
    return nil
}

Uuid libと一緒に、しかしそれでも運がなかった。

12
Ewan Valentine

UUIDを間違ったタイプとして保存しようとしていたことが判明しました...

func (user *User) BeforeCreate(scope *gorm.Scope) error {
    scope.SetColumn("ID", uuid.NewV4())
    return nil
}

必要なとき...

func (user *User) BeforeCreate(scope *gorm.Scope) error {
    scope.SetColumn("ID", uuid.NewV4().String())
    return nil
}
9
Ewan Valentine

これには、 gorm および go.uuid が必要です。

go get github.com/jinzhu/gorm

go get github.com/satori/go.uuid

次のように、gorm.Modelの代わりに独自のモデルベースモデルを作成してみてください。

type Base struct {
 ID         string     `sql:"type:uuid;primary_key;default:uuid_generate_v4()"`
 CreatedAt  time.Time  `json:"created_at"`
 UpdatedAt  time.Time  `json:"update_at"`
 DeletedAt *time.Time `sql:"index" json:"deleted_at"`
}

次に、次のように、レコードを作成する前に呼び出されるメソッドを使用して、このフィールドにデータを入力します。

func (base *Base) BeforeCreate(scope *gorm.Scope) error {
 uuid, err := uuid.NewV4().String()
 if err != nil {
  return err
 }
 return scope.SetColumn("ID", uuid)
}

したがって、特定のケースでは、次のようになります。

type User struct {
    Base
    FirstName string `form:"first_name" json:"first_name,omitempty"`
    LastName  string `form:"last_name" json:"last_name,omitempty"`
    Password  string `form:"password" json:"password" bindind:"required"`
    Email     string `gorm:"type:varchar(110);unique_index" form:"email" json:"email,omitempty" binding:"required"`
    Location  string `form:"location" json:"location,omitempty"`
    Avatar    string `form:"avatar" json:"avatar,omitempty"`
    BgImg     string `form:"bg_img" json:"bg_img,omitempty"`
}

これについての詳細は見つけることができます ここ

0
Peter Lenjo

エラー (pq: relation "users" does not exist)は通常、tableusersがデータベースに存在しないことを意味します。 2つのモデル間の関係とは何の関係もありません。

したがって、基本的には、最初にデータベースにテーブルを作成する必要があります(または、@ Apinが提案するようにデータベースを自動移行します)。そして、同じコードを再実行してみてください。

0
desaiparth