【发布时间】:2019-01-02 18:55:58
【问题描述】:
我在预加载和关联方面遇到了障碍
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
并为我填写模型..
我是在做一些明显错误的事情吗?
【问题讨论】:
标签: database go go-gorm preloading