数据库查询命令正在生成奇怪的SQL查询

时间:2017-07-24 09:22:13

标签: go go-gorm cockroachdb

我的模特是:

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

我已将变量report初始化为var report Report我已成功将此模型自动迁移为数据库表,并使用GORM sql INSERT将数据库填充为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和蟑螂db。这在使用GO pq驱动程序和原始sql命令时工作正常。

2 个答案:

答案 0 :(得分:1)

deleted_at列是GORM&n base gorm.Model结构及其soft delete功能的一部分。您是否在某个我们无法在此示例中看到的地方使用gorm.Model?除非您定义名为DeletedAt的字段或在模型结构中嵌入gorm.Model,否则不会发生这种情况。

答案 1 :(得分:0)

由于模型的字段为delete_at,gorm会自动使用软删除功能。您可以使用Unscoped

 db.Unscoped().Find(&reports)

与运行原始查询相同

db.Raw("SELECT * FROM reports").Scan(&reports)