4

我的模型为:

type Report struct {
    ID    int     `json:"id,omitempty" gorm:"primary_key"`
    Title *string `json:"title" gorm:"not null"`
}

我已经初始化了变量report,因为var report Report我已经成功地将这个模型自动迁移为数据库表,并sql INSERT使用 GORM填充了数据库db.Create(&report)

我面临的问题是在尝试查询命令时。GORM 支持的每个查询命令,例如db.Find(&report),db.First(&report, 1)都会导致如下查询:

SELECT * FROM "reports"  WHERE "reports"."deleted_at" IS NULL AND ((id = $1))
SELECT * FROM "reports"  WHERE "reports"."deleted_at" IS NULL AND ((id = $1))
SELECT * FROM reports WHERE (reports.deleted_at IS NULL) AND ((id = $1))
SELECT * FROM reports WHERE (reports.deleted_at IS NULL) AND ((id = $1))
SELECT 0 done

我无法查询数据库。我正在将 GORM 与 cockroach db 一起使用。这在使用 GO pq 驱动程序和原始 sql 命令时可以正常工作。

4

2 回答 2

2

deleted_at列是 GORM基础gorm.Model结构及其软删除功能的一部分。你在使用gorm.Model我们在这个例子中看不到的地方吗?除非您在模型结构中定义一个名为DeletedAt或嵌入 a的字段,否则这不应该发生。gorm.Model

于 2017-07-24T14:35:53.160 回答
1

由于模型具有字段 deleted_at,gorm 自动使用软删除功能。您可以使用Unscoped

 db.Unscoped().Find(&reports)

这与运行原始查询相同

db.Raw("SELECT * FROM reports").Scan(&reports)
于 2019-08-28T16:26:35.553 回答