gpt4 book ai didi

database - 如何使用 Gorm 预加载

转载 作者:IT王子 更新时间:2023-10-29 02:08:03 24 4
gpt4 key购买 nike

我遇到了预加载和关联的障碍

type Entity struct {
ID uint `gorm:"primary_key"`
Username string
Repositories []*Repository `gorm:"many2many:entity_repositories"`
}

type Repository struct {
ID uint `gorm:"primary_key"`
Name string
Entities []*Entity `gorm:"many2many:entity_repositories"`
}

对于小用户数,使用下面的预加载就可以了

 db.Preload("Repositories").Find(&list)

也试过

 db.Model(&User{}).Related(&Repository{}, "Repositories").Find(&list)

预加载似乎是 select * entities,然后是使用 SELECT * FROM "repositories"INNER JOIN "entity_repositories"ON "entity_repositories"."repository_id"= "repositories ".id"WHERE ("entity_repositories"."entity_id"IN ('1','2','3','4','5','6','7','8','9 ','10'))

随着用户数量的增加,这不再可维护,因为它达到了 sqlite 限制 (dev)。我尝试了无数种排列! .. 实际上我想我只是想让它做一些像

SELECT entities.*, repositories.*  
FROM entities
JOIN entity_repositories ON entity_repositories.entity_id = entities.id
JOIN repositories ON repositories.id = entity_repositories.repository_id
ORDER BY entities.id

并为我填写模型..

我是不是做错了什么?

最佳答案

不幸的是,这正是 GORM 处理预加载的方式。

go-pg有更好的查询,但没有与 GORM 相同的功能。在某些情况下它仍然会执行多个查询。

老实说,我建议只使用 query building使用原始 SQL,特别是如果您知道您的模型在编译时会是什么样子。我最终在我的项目中采用了这种方法,尽管事实上我并不知道我的模型会是什么样子。

关于database - 如何使用 Gorm 预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54011708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com