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!

本作品采用《CC 协议》,转载必须注明作者和本文链接
唯有所执,方有所成。
讨论数量: 10
nff93

可以像 gorm/gen 那样用嘛?

func main() {
  // Basic DAO API
  user, err := query.User.Where(u.Name.Eq("modi")).First()

  // Dynamic SQL API
  users, err := query.User.FilterWithNameAndRole("modi", "admin")
}

感觉这样更优雅 :smirk:

2年前 评论
BowenHan (楼主) 2年前

你好,ORM 是基于哪个底层包开发的啊

2年前 评论
BowenHan (楼主) 2年前

给作者一个建议,laravel 是一个非常优秀的 php 框架,其中的一些特性是因为 php 脚本语言和执行模式的设计。我的意思可以学,但不要模仿,不一定要照搬 laravel 的概念。多考虑 go 语言的特性。吸收和适用于 go

2年前 评论
BowenHan (楼主) 2年前

想问一下 artisan 命令行是使用 go 的 cobra 还是自己实现的额?我看是基于 gin 框架,那些地方用了 gin 的东西?

1年前 评论
BowenHan (楼主) 1年前