登录
首页 >  Golang >  Go问答

Gorm 查询只返回一行

来源:stackoverflow

时间:2024-02-20 14:12:24 221浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《Gorm 查询只返回一行》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

我们尝试将 gorm 与 mysql 8 一起使用,但非常沮丧。

我有下表(为了简洁起见,进行了简化)

type storagepool struct {
    gorm.model
    poolid  string   `json:"id" gorm:"column:poolid;size:40;unique;not null"`
    volumes []volume `json:"volumes" gorm:"foreignkey:storageid;association_foreignkey:poolid"`
}

type volume struct {
    gorm.model
    storageid string `json:"storageid" gorm:"column:storageid;size:40"`
}

数据插入似乎工作正常。两个表都已填充并且没有违反任何约束。

需要单个记录的查询似乎工作正常:

poolrecord := &storagepool{}
if err := tx.where("poolid = ?", pool.poolid).first(&storagepool{}).scan(poolrecord).error; err != nil {        
    return err
}

此查询仅返回一行。当我在 go 外部以原始 sql 形式执行此精确查询时,它会返回我期望的所有 31 条记录。

var poolVolumes []Volume
if err := tx.Where("storageid = ?", pool.PoolId).Find(&Volume{}).Scan(&poolVolumes).Error; err != nil {
    return err
}
log.Debugf("found %d volumes belonging to %q [%s]", len(poolVolumes), pool.Name, pool.PoolId)

根据文档,第二个 sql 语句相当于“select * from volumes where storageid = 'poolid'”。这不是我所得到的行为。

有人知道我在这里做错了什么吗?


解决方案


我在使用 go 编码时很少使用 orm,但是按照 gorm 的 doc ,似乎您的做法是错误的。

scan 用于将结果扫描到另一个结构体中,如下所示:

type Result struct {
  Name string
  Age  int
}

var result Result
db.Table("users").Select("name, age").Where("name = ?", 3).Scan(&result)

本篇关于《Gorm 查询只返回一行》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>