Goravel ORM 新增模型關聯,用 Golang 寫關聯也可以跟 Laravel 一樣簡單

Bowens發表於2023-03-16

關於 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 協議》,轉載必須註明作者和本文連結
唯有所執,方有所成。

相關文章