2017-07-24 59 views
3

我有我的模型:DB查询命令正在生产奇怪的SQL查询

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

我已经初始化的变量report为我已经成功地自动迁移该模型的数据库表和使用GORM的db.Create(&report)已填充数据库sql INSERT

我面临的问题是在尝试查询命令时。通过GORM如db.Find(&report)db.First(&report, 1)所支持的所有查询命令时产生的查询,如folows:

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 

我无法查询数据库。我正在用蟑螂db使用GORM。这在使用GO pq驱动程序和原始sql命令时工作正常。

回答

1

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

+0

正是我所困惑的。我没有定义任何名为'DeletedAt'的字段,也没有定义'gorm.Model'。我只在'httprouter'下定义了一个'Report struct'和封装的gorm来插入和查询每个。 'db.create'工作正常。在'db.Find'中使用错误函数返回'找不到记录'。顺便说一句,我基于由cockroachlabs提供的example-orm包密切推导出我的代码。 – 1tree

+0

我再次尝试,但无法找出问题所在。在GORM的文档中以** Query With Where(Struct&Map)**的形式提供的示例也不起作用。同时,我使用GORM的原始查询作为'db.Raw(“SELECT * FROM reports”)。扫描(&report)',并且目前看起来似乎正常。 – 1tree