首页 >后端开发 >Golang >如何高效获取GORM地点-城镇关系中的关联数据?

如何高效获取GORM地点-城镇关系中的关联数据?

Linda Hamilton
Linda Hamilton原创
2024-12-18 13:40:11887浏览

How to Efficiently Fetch Associated Data in GORM's Place-Town Relationship?

GORM Golang ORM 关联:获取关联字段

在 GORM(一个强大的 Go ORM)中,您可以在表示数据库表的结构之间创建关联。在此场景中,您有一个与 Town 结构关联的 Place 结构,其中每个 Place 属于一个 Town。

您的代码当前获取所有 Place 记录,但您希望包含每个 Place 的关联 Town 信息。您查询中的错误是 Place 结构中未指定外键 TownID。

要解决此问题,请修改 Place 结构:

type Place struct {
  ID          int
  Name        string
  TownID      int // The foreign key
  Town        Town
}

现在,您有多种选择检索关联的城镇数据:

选项 1:手动加载(不推荐)

迭代每个地点并使用模型手动加载关联的城镇。相关:

places := []Place{}
db.Find(&places)
for i, _ := range places {
    db.Model(places[i]).Related(&places[i].Town)
}

这种方法在产生预期结果的同时,受到“N 1 “问题,每个地方都会发出多个数据库查询。

选项 2:预加载(推荐)

在获取地点记录时使用 Preload 函数预先加载关联的城镇:

db.Preload("Town").Find(&places)

这只会触发两个查询:一个用于获取所有地点,一个用于获取所有地点获取所有关联的城镇。它随着地点和城镇的数量而扩展。

预期输出:

[{1 Place1  {1 Town1} 1} {2 Place2  {1 Town1} 1}]

以上是如何高效获取GORM地点-城镇关系中的关联数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn