gormの更新と削除(マイグレーションも)

gorm

テーブルの記載

これを元にマイグレーションをしてくれるわけではないようです(そのようなライブラリも存在する)

// User user info
type User struct {
    ID    int64  `gorm:"column:id;primary_key"`
    Name  string `gorm:"column:name" sql:"not null;type:varchar(256)"`
    Email string `gorm:"column:email" sql:"not null;type:varchar(256)"`
}

マイグレーション

gormにはマイグレーションするような機能はなさそうなので、Go製のマイグレーションツールを使用

github.com

テーブルの作成

USER=$DB_USER_NAME
PASSWORD=$DB_USER_PASSWORD
HOST=$DB_HOST
DB=$MYSQL_DATABASE

migrate.linux-amd64 -path ./migrate -database 'mysql://mysql:secret@tcp(mysql:3306)/db' up 1

テーブルの削除

migrate.linux-amd64 -source file://migrate -database 'mysql://mysql:secret@tcp(mysql:3306)/db' down 1

Update

   // 構造体を使っての更新の例
    db.Model(&user).Updates(
        users.User{
            Name:  user.Name,
            Email: user.Email,
        })

Delete

   // delete
    db.Model(&user).Delete(&user)

    // エラーハンドリングの例
    if err := db.Model(&user).Delete(&user).Error; err != nil {
        return errors.New("Delete failed")
    }