Gorm Find() 查询未填充保存结果集的已定义结构中定义的所有字段

Gorm Find() query not populating all fields defined in the defined struct holding the result set

我遇到的问题是 tx 返回的结果集中没有设置所有字段。无法弄清楚为什么?它在实际数据库中有值table.

// request object supplied in FetchTransactionWithHighestExpiry:
type ProvisionRequest struct {
        Identity string     `json:"identity"`
        IdentityType string `json:"identityType"`
}

// struct to model database table
type Transactions struct {
        Identity string `gorm:"index;not null"`
        IdentityType string 
}

// method where there is problem
func (c *DBClient) FetchTransactionWithHighestExpiry(req *model.ProvisionRequest) (model.Transactions, error)  {
    var tx model.Transactions
    res := c.client.Model(&model.Transactions{}).Where("identity = ? AND endDate  > ?", req.Identity, time.Now().Unix()).Order("endDate desc").First(&tx)
    return tx, res.Error
}

我的 tx 只有 identity set 的值,而 identityType 是一个空字符串。知道我在这里做错了什么吗?

编辑 1:事务 table 架构

-- rp.transactions definition

CREATE TABLE `transactions` (
  `transaction_id` varchar(255) NOT NULL,
  `identity` varchar(255) DEFAULT NULL,
  `identityType` varchar(15) DEFAULT NULL,
  `serviceId` varchar(255) DEFAULT NULL,
  `partnerId` varchar(255) DEFAULT NULL,
  `countryId` varchar(255) DEFAULT NULL,
  `updatedAt` timestamp NULL DEFAULT NULL,
  `createdAt` timestamp NULL DEFAULT NULL,
  `startDate` int NOT NULL,
  `endDate` int NOT NULL,
  PRIMARY KEY (`transaction_id`),
  KEY `identity_idx` (`identity`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

通过default,在构造查询时,gorm会使用snake_case约定将IdentityIdentityType字段转换为identityidentity_type列。

如果您的 table 列的名称不同,您需要指定。

// struct to model database table
type Transactions struct {
        Identity string `gorm:"index;not null"`
        IdentityType string `gorm:"column:identityType"`
}