I defined a struct:

type BookEntity struct {
    ID int64 `json:"id" gorm:"primaryKey,autoIncrement"`

    Alias     string         `json:"alias" gorm:"type:varchar(100);uniqueIndex"`
    CreatedAt time.Time      `json:"created_at"`
    UpdatedAt time.Time      `json:"updated_at"`
    DeletedAt gorm.DeletedAt `gorm:"index"`
}

And, add a hook for it:

func (c *BookEntity) AfterDelete(db *gorm.DB) error {
       // can't get data with c variable
    return nil
}

if I print c, I will get all zero value in c fields.

So, it's because of deletion, or is this a bug ?

How can I find a solution?

Comment From: github-actions[bot]

The issue has been automatically marked as stale as it missing playground pull request link, which is important to help others understand your issue effectively and make sure the issue hasn't been fixed on latest master, checkout https://github.com/go-gorm/playground for details. it will be closed in 2 days if no further activity occurs. if you are asking question, please use the Question template, most likely your question already answered https://github.com/go-gorm/gorm/issues or described in the document https://gorm.io ✨ Search Before Asking

Comment From: LukasPukenis

It's probably because you have other fields embedded and forgot to preload those with Preload(field)

Comment From: github-actions[bot]

The issue has been automatically marked as stale as it missing playground pull request link, which is important to help others understand your issue effectively and make sure the issue hasn't been fixed on latest master, checkout https://github.com/go-gorm/playground for details. it will be closed in 2 days if no further activity occurs. if you are asking question, please use the Question template, most likely your question already answered https://github.com/go-gorm/gorm/issues or described in the document https://gorm.io ✨ Search Before Asking

Comment From: Xwudao

It's probably because you have other fields embedded and forgot to preload those with Preload(field)

There are no extra embedded fields in my struct:

type BookEntity struct {
    ID int64 `json:"id" gorm:"primaryKey,autoIncrement"`

    SiteTitle string `json:"site_title" gorm:"type:varchar(700)"`
    SiteName  string `json:"site_name" gorm:"type:varchar(700)"`
    BookName  string `json:"book_name" gorm:"type:varchar(700)"`
    Link      string `json:"link" gorm:"type:varchar(500);unique:'uni_link'"`
    Domain    string `json:"domain" gorm:"type:varchar(200);size:200;not null"`
    Indexed   bool   `json:"indexed" gorm:"size:1;type:bool;default:0"`
    Author    string `json:"author" gorm:"type:varchar(700)"`
    Desc      string `json:"desc"`

    Alias     string         `json:"alias" gorm:"type:varchar(100);uniqueIndex"`
    CreatedAt time.Time      `json:"created_at"`
    UpdatedAt time.Time      `json:"updated_at"`
    DeletedAt gorm.DeletedAt `gorm:"index"`
}

By the way, in other hooks, I can get data, such as AfterCreate, AfterUpdate

Comment From: github-actions[bot]

The issue has been automatically marked as stale as it missing playground pull request link, which is important to help others understand your issue effectively and make sure the issue hasn't been fixed on latest master, checkout https://github.com/go-gorm/playground for details. it will be closed in 2 days if no further activity occurs. if you are asking question, please use the Question template, most likely your question already answered https://github.com/go-gorm/gorm/issues or described in the document https://gorm.io ✨ Search Before Asking

Comment From: birdycn

遇到同样的问题,请问解决了吗

Comment From: Xwudao

遇到同样的问题,请问解决了吗

然而并没有,只能增加额外代码,在删除的时候操作。

Comment From: sheepsong

I guess you are deleting with id, instead of struct itself. db.Delete(&BookEntity{},id) The hook func will get empty struct. db.Delete(&BookEntity{ID:id}) The hook func will get the exactly struct data with ID field

Comment From: Xwudao

I guess you are deleting with id, instead of struct itself. db.Delete(&BookEntity{},id) The hook func will get empty struct. db.Delete(&BookEntity{ID:id}) The hook func will get the exactly struct data with ID field

Thank you very much. Maybe, I understand why could not get data before. Thanks.

Comment From: wuhan005

If I delete multiple rows like this:

db.Where("id IN ?", ids).Delete(&User{})

How can I get each *User in the AfterDelete hook?

Comment From: liveHarshit

can we re-open this issue?

If I delete multiple rows like this:

go db.Where("id IN ?", ids).Delete(&User{})

How can I get each *User in the AfterDelete hook?

Comment From: StevenOng97

I also face the issue when trying to delete with select

Comment From: vivere-dally

I also am interested in how this works? with multiple rows