查询Gorm GOolang连接表

dpiehjr4  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(160)
type Packages struct {
   ID              uint      `json:"id" gorm:"primary_key"`
   PackageName     string    `json:"package_name" gorm:"type:varchar(100)"`
   Version         []Version `json:"version" gorm:"foreignkey:PackageID;constraint:OnDelete:CASCADE;"`
}

type Version struct {
   ID                 uint           `json:"id" gorm:"primary_key"`
   CreatedAt          time.Time      `json:"created_at" gorm:"autoCreateTime"`
   UpdatedAt          time.Time      `json:"updated_at" gorm:"autoUpdateTime"`
   PackageID          uint           `json:"-"`
   VersionCode        string         `json:"version_code" gorm:"type:varchar(100);uniqueIndex:idx_uniq"`
   BuildNumber        int            `json:"build_number"`
}

我需要一个查询,以选择所有的包(完整的细节需要包括字段在版本结构)的基础上版本代码的条件。
此查询将针对数据库提供结果:
SELECT * FROM软件包JOIN版本ON packages.id =版本.软件包标识WHERE版本.版本代码=1.0
但当我换上GORM:

config.DB.Select("*").Joins("LEFT JOIN versions ON packages.id=versions.package_id AND versions.version_code=?", version_code).Find(&packages)

它不是基于版本代码过滤的,它仍然给出了完整的细节。任何人请帮助!!!!

b1payxdu

b1payxdu1#

要在Packages结构中加载Version切片,请使用Preload函数。您的查询应如下所示:

var packages []Packages
err := config.DB.Preload("Version").Joins("LEFT JOIN versions ON packages.id=versions.package_id").Where("versions.version_code=?", version_code).Find(&packages).Error

相关问题