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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

gorm:填充新創(chuàng)建數(shù)據(jù)的相關(guān)字段

gorm:填充新創(chuàng)建數(shù)據(jù)的相關(guān)字段

Go
皈依舞 2022-10-24 15:29:05
我有以下相關(guān)表格:type Person struct {    ID      uint64 `json:"id" gorm:"primary_key;auto_increment"`    Name    string `json:"name"`    Surname string `json:"surname"`}type Book struct {    ID        uint64    `json:"id" gorm:"primary_key;auto_increment"`    Title     string    `json:"title" binding:"required,min=2,max=100" gorm:"type:varchar(100)"`    Author    Person    `json:"author" binding:"required" gorm:"foreignkey:AuthorID"` // * here    AuthorID  uint64    `json:"-"`                                                    // * here    WrittenIn string    `json:"written_in" gorm:"type:varchar(5)"`    CreatedAt time.Time `json:"created_at" gorm:"default:CURRENT_TIMESTAMP"`    UpdatedAt time.Time `json:"updated_at" gorm:"default:CURRENT_TIMESTAMP"`}我可以通過(guò)使用此功能的Create()方法成功創(chuàng)建數(shù)據(jù):gormfunc CreateBook(ctx *gin.Context) {    // validating input    var inputData CreateBookInput    if err := ctx.ShouldBindJSON(&inputData); err != nil {        ctx.JSON(401, gin.H{"status": "fail", "error": err.Error()})    }    // create book    book := models.Book{Title: inputData.Title, AuthorID: inputData.AuthorID, WrittenIn: inputData.WrittenIn}    database.DB.Create(&book).Preload("Author")    // database.DB.Preload("Author").Create(&book)    // database.DB.Set("gorm:auto_preload", true).Create(&book)        ctx.JSON(201, gin.H{"status": "success", "book": book})}我想把新創(chuàng)作的書(shū)連同它的作者一起歸還。預(yù)期響應(yīng):"book": {    "id": 10,    "title": "Chinor ostidagi duel",    "author": {        "id": 3,        "name": "John",        "surname": "Smith"    },    "written_in": "1983",    "created_at": "2022-01-07T17:07:50.84473824+05:00",    "updated_at": "2022-01-07T17:07:50.84473824+05:00"}但我找不到填充相關(guān)“作者”的方法。所以我得到的是:"book": {    "id": 10,    "title": "Chinor ostidagi duel",    "author": {        "id": 0,       // empty        "name": "",    // empty        "surname": ""  // empty    },如何填充新創(chuàng)建數(shù)據(jù)的相關(guān)字段?
查看完整描述

2 回答

?
慕絲7291255

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以嘗試的一種可能的解決方案是使用AfterCreate鉤子。

func (b *Book) AfterCreate(tx *gorm.DB) (err error) {
   return tx.Model(b).Preload("Author").Error
   }

您可以在此處找到有關(guān)掛鉤的更多信息。


查看完整回答
反對(duì) 回復(fù) 2022-10-24
?
開(kāi)滿天機(jī)

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊

Preload是鏈?zhǔn)椒椒?,Create是finisher方法。只有finisher 方法會(huì)生成并執(zhí)行SQL。


所以...


1 創(chuàng)建書(shū)后按id查找作者


if err ;= database.DB.Create(&book).Error; err != nil {

  return err

}


// will not throw not found error

database.DB.Limit(1).Find(&book.Author, book.AuthorID)


ctx.JSON(201, gin.H{"status": "success", "book": book})

2 每次加載作者數(shù)據(jù),使用鉤子


// create and update

// func (b *Book) AfterSave(tx *gorm.DB) (err error) {

// just create

func (b *Book) AfterCreate(tx *gorm.DB) (err error) {

  // handle error if you want

  tx.Limit(1).Find(&b.Author, b.AuthorID)

  return

}


查看完整回答
反對(duì) 回復(fù) 2022-10-24
  • 2 回答
  • 0 關(guān)注
  • 222 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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