Gorm 怎么用原生sql实现预加载
时间: 2023-12-26 19:05:32 浏览: 112
Gorm 不支持原生 SQL 的预加载,因为预加载是 Gorm 自身的一种特性,它需要与 Gorm 的 ORM 模型相结合才能发挥作用。但是,你可以使用原生 SQL 查询来手动加载关联数据。
例如,如果我们有一个 `User` 模型和一个 `Post` 模型,其中 `User` 模型有多个 `Post` 模型,我们可以使用以下代码手动加载 `User` 的所有 `Post`:
```go
type User struct {
ID uint
Name string
Email string
Posts []Post
}
type Post struct {
ID uint
Title string
Content string
UserID uint
}
var users []User
db.Raw("SELECT * FROM users").Scan(&users)
for i := range users {
var posts []Post
db.Raw("SELECT * FROM posts WHERE user_id = ?", users[i].ID).Scan(&posts)
users[i].Posts = posts
}
```
在上面的示例中,我们首先使用原生 SQL 查询加载所有的 `User`,然后遍历每个 `User`,使用原生 SQL 查询加载该 `User` 的所有 `Post`,并将其赋值给 `User` 的 `Posts` 字段。
阅读全文