假设我们有两个模型:UserPostUser拥有多篇Post

type User struct {
    ID    uint
    Name  string
    Posts []Post
}

type Post struct {
    ID       uint
    Title    string
    Content  string
    UserID   uint
    UserName string `gorm:"-"`
}

我们想要查询所有User及其对应的Post,并将PostUserName字段赋值为UserName字段。我们可以使用PreloadJoins方法联合使用来实现:

users := []User{}
db.Preload("Posts").Joins("LEFT JOIN users ON posts.user_id = users.id").Select("users.*, posts.*, users.name as user_name").Scan(&users)

这个查询会生成以下SQL语句:

SELECT users.*, posts.*, users.name as user_name FROM "users" LEFT JOIN posts ON posts.user_id = users.id

使用Preload方法可以预加载UserPosts字段,使用Joins方法可以联合查询UserPost表,并使用LEFT JOIN连接两个表。使用Select方法可以选择需要查询的字段,并将UserName字段赋值给PostUserName字段。

最终,我们可以得到所有User及其对应的Post,并且每个PostUserName字段都等于其对应的UserName字段。

gorm preload和joins联合使用的例子

原文地址: http://www.cveoy.top/t/topic/bnfF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录