Gorm未加载pq.Int64Array

问题描述

使用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)
    }