Golang Go语言中Goravel ORM 新增模型关联,用 Golang 写关联也可以跟 Laravel 简单

关于 Goravel

Goravel 是一个功能完备、具有良好扩展能力的 Web 应用程序框架。作为一个起始脚手架帮助 Golang 开发者快速构建自己的应用。框架风格与 Laravel 保持一致,让 PHPer 不用学习新的框架,也可以愉快的玩转 Golang !

ORM 模块上新「模型关联」,好用的飞起,有码有真相!

定义模型

一个用户可以发布多篇文章

type User struct {
  orm.Model
  Name   string
  Posts  []*Post
}
type Post struct {
  orm.Model
  UserID   uint
  Name     string
}

查找(同时预加载关联模型)

var user models.User
facades.Orm.Query().With("Post").Find(&user)

// 预加载多个关联模型(嵌套预加载) facades.Orm.Query().With(“Post”).With(“Phone.Contact”).Find(&user)

// 为预加载添加约束 facades.Orm.Query().With(“Post”, “name = ?”, “author”).Find(&user) facades.Orm.Query().With(“Post”, func(query orm.Query) orm.Query { return query.Where(“name = ?”, “author”) }).Find(&book)

延迟预加载

var user models.User
facades.Orm.Query().Find(&user)
facades.Orm.Query().Load(&user, "Post")

// 为预加载添加约束 facades.Orm.Query().Load(&book, “Post”, “name = ?”, “author”).Find(&book) facades.Orm.Query().Load(&book, “Post”, func(query orm.Query) orm.Query { return query.Where(“name = ?”, “author”) }).Find(&book)

创建(同时创建关联模型)

user := User{Name: "user", Post: &Post{Name: "post"}}

// 创建 User 的同时创建所有子关联 facades.Orm.Query().Select(orm.Associations).Create(&user)

更多使用细节请 查看文档,Welcome Star, PR and Issues !


Golang Go语言中Goravel ORM 新增模型关联,用 Golang 写关联也可以跟 Laravel 简单

更多关于Golang Go语言中Goravel ORM 新增模型关联,用 Golang 写关联也可以跟 Laravel 简单的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang Go语言中Goravel ORM 新增模型关联,用 Golang 写关联也可以跟 Laravel 简单的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中使用Goravel ORM来新增模型关联确实可以借鉴Laravel的简洁性,尽管两者在语言特性和生态系统上存在差异。Goravel作为一个为Go语言设计的ORM框架,致力于提供类似Laravel的流畅API,以便开发者能够更加高效地处理数据库操作。

要在Goravel中新增模型关联,你首先需要确保已经定义了相关的模型结构体,并且这些结构体已经映射到了数据库中相应的表。接下来,你可以利用Goravel提供的关联方法(如HasOneHasManyBelongsToBelongsToMany等)来定义模型之间的关系。

例如,假设你有两个模型UserPost,其中User有多个Post,你可以在User模型中这样定义关联:

type User struct {
    goravel.Model
    Posts []Post `gorm:"foreignKey:UserID"`
}

func (u *User) Posts() goravel.Relation {
    return u.HasMany(&Post{}, "UserID")
}

Post模型中,你同样需要定义反向关联(可选):

type Post struct {
    goravel.Model
    UserID uint
    User   User `gorm:"foreignKey:UserID"`
}

func (p *Post) User() goravel.Relation {
    return p.BelongsTo(&User{}, "UserID")
}

通过这种方式,Goravel允许你以非常接近Laravel的方式在Go语言中处理复杂的模型关联。这不仅能够提升开发效率,还能保持代码的可读性和可维护性。

回到顶部