Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅返回一行的Gorm查询_Go_Go Gorm - Fatal编程技术网

仅返回一行的Gorm查询

仅返回一行的Gorm查询,go,go-gorm,Go,Go 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_foreig

我们试图将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语句相当于从STORAGEID='poolid'的卷中选择*。这不是我现在的行为


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

我很少在使用go编码时使用ORM,但按照gorm的说明,似乎你做错了

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

类型结果结构{ 名称字符串 年龄智力 } var结果
db.Tableusers.Selectname,age.Wherename=?,3.Scan&result我很少在使用go编码时使用ORM,但按照gorm的说明,似乎您的方式不对

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

类型结果结构{ 名称字符串 年龄智力 } var结果 db.Tableusers.Selectname,age.Wherename=?,3.扫描和结果一致性检查值:pool.PoolId是否正确检查值:pool.PoolId是否正确