第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Gorm 關(guān)聯(lián) BeforeCreate 回調(diào)未按預(yù)期工作

Gorm 關(guān)聯(lián) BeforeCreate 回調(diào)未按預(yù)期工作

Go
青春有我 2022-05-18 17:01:26
我有Customer結(jié)構(gòu)type Customer struct {    Model    Email                 string     `json:"email,omitempty"`    Addresses             []Address}func (c *Customer) BeforeCreate() (err error) {    if err := c.GenerateID(); err != nil {        return err    }    return c.Marshal()}和Address結(jié)構(gòu)type Address struct {    Model    CustomerID         string    Address1           string}func (a *Address) BeforeCreate() error {// The ID is still generated, but the insert query has no `id` in it    if err := a.GenerateID(); err != nil {        return err    }    return nil}Model結(jié)構(gòu)type Model struct {    ID        string `gorm:"primary_key;type:varchar(100)"`    CreatedAt time.Time    UpdatedAt time.Time    DeletedAt *time.Time `sql:"index"`}func (model *Model) GenerateID() error {    uv4, err := uuid.NewV4()    if err != nil {        return err    }    model.ID = uv4.String()    return nil}一個客戶:customer := &model.Customer{    Email:     "a",    Addresses: []model.Address{        {            Address1: "abc street",        },    },}if err := gormDb.Create(customer).Error; err != nil {    return nil, err}I got an error: Error 1364: Field 'id' doesn't have a default value對于地址對象但是,如果我刪除這些Address關(guān)聯(lián),一切都會奏效。并Id生成客戶。    customer := & model.Customer{    Email:     "a",    //Addresses: []model.Address{        //{            //Address1: "abc street",        //},    //},}如何保持Address關(guān)聯(lián)并成功插入,并且仍然使用這種 ID 生成機(jī)制?
查看完整描述

2 回答

?
MYYA

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個贊

您可以使用scope.SetColumn在BeforeCreate鉤子中設(shè)置字段的值


func (a *Address) BeforeCreate(scope *gorm.Scope) error {

  scope.SetColumn("ID", uuid.New())

  return nil

}

參考:https ://v1.gorm.io/docs/create.html#Setting-Field-Values-In-Hooks


查看完整回答
反對 回復(fù) 2022-05-18
?
幕布斯7119047

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個贊

您應(yīng)該使用tx.Statement.SetColumn在 GORM 掛鉤中設(shè)置字段值,例如BeforeCreate. 以下是示例實(shí)現(xiàn)。


func (s Product3) BeforeCreate(tx *gorm.DB) (err error) {

    tx.Statement.SetColumn("Price", s.Price+100)

    return nil

}

GORM Github repo 的參考實(shí)現(xiàn)鏈接 https://github.com/go-gorm/gorm/blob/ac722c16f90e0e0dffc600c7f69e791c110d788c/tests/hooks_test.go#L306-L309


來自 GORM 文檔的參考鏈接 https://gorm.io/docs/update.html#Change-Updating-Values


查看完整回答
反對 回復(fù) 2022-05-18
  • 2 回答
  • 0 關(guān)注
  • 433 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號