golang gorm完整代码,一对多每个从表中的limit都为5
时间: 2024-03-05 09:55:00 浏览: 140
gorm关联一对多关系golang
假设我们有两个模型 `User` 和 `Post`,一个用户可以拥有多篇文章,我们需要在查询用户时一并获取其所有文章,并且每个用户只需要获取最新的 5 篇文章。
```go
type User struct {
gorm.Model
Name string
Posts []Post
}
type Post struct {
gorm.Model
Title string
Body string
UserID uint
User User
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 自动迁移模型
db.AutoMigrate(&User{}, &Post{})
var users []User
// 预加载 User 的 Posts,每个用户最多获取最新的 5 篇文章
db.Preload("Posts", func(db *gorm.DB) *gorm.DB {
return db.Order("created_at DESC").Limit(5)
}).Find(&users)
// 输出用户及其文章
for _, user := range users {
fmt.Printf("User: %s\n", user.Name)
for _, post := range user.Posts {
fmt.Printf(" Post: %s\n", post.Title)
}
}
}
```
在上述代码中,我们使用了 `Preload` 方法来预加载 `User` 的 `Posts`,同时传入了一个回调函数,该函数会在 SQL 查询中添加一个 `ORDER BY created_at DESC LIMIT 5` 子句,以限制每个用户最多只获取最新的 5 篇文章。注意,这里的 `Limit(5)` 是针对每个用户的文章数量,而不是所有文章的数量。
阅读全文