问题描述
使用gorm使用libpq对postgres表进行表扫描,它不会加载pq.Int64Array。
简化模型:
type Event struct {
ExcludeDates pq.Int64Array // Array of StartTimes of single dates that have been deleted
}
执行表扫描的代码:
events,_ := gormdb.Model(&Event{}).Rows()
defer events.Close()
for events.Next() {
var event Event
gormdb.ScanRows(events,&event)
}
ExcludeDates
字段始终为空。
解决方法
问题是我使用的表是由另一个ORM生成的,并且该表的列名与GORM所使用的命名方案不匹配,因此数据没有正确加载到结构中。
您可以逐字段覆盖GORM的列命名方案,但是如果您需要覆盖所有列名称,则可能会很麻烦。供以后参考,因为它似乎没有记录在案,所以您可以通过重新定义gorm.TheNamingStrategy.Column
函数来更改GORM用于列名的命名方案。默认情况下,GORM将结构字段名称转换为数据库列名称的蛇形。相反,此示例使GORM将字段名称转换为简单的小写数据库列名称:
gorm.TheNamingStrategy.Column = func(in string) string {
return strings.ToLower(in)
}