ent 基本使用十四 edge

edge 在ent 中屬於比較核心,同時也是功能最強大的,ent 提供了比較強大的關係模型git

快速使用

  • 參考圖

     

     

以上包含了兩個經過邊定義的關係
pets/owner:
usergithub

 
package schema
import (
    "github.com/facebookincubator/ent"
    "github.com/facebookincubator/ent/schema/edge"
)
// User schema.
type User struct {
    ent.Schema
}
// Fields of the user.
func (User) Fields() []ent.Field {
    return []ent.Field{
        // ...
    }
}
// Edges of the user.
func (User) Edges() []ent.Edge {
    return []ent.Edge{
        edge.To("pets", Pet.Type),
    }
}
 
 

pet架構

package schema
import (
    "github.com/facebookincubator/ent"
    "github.com/facebookincubator/ent/schema/edge"
)
// User schema.
type Pet struct {
    ent.Schema
}
// Fields of the user.
func (Pet) Fields() []ent.Field {
    return []ent.Field{
        // ...
    }
}
// Edges of the user.
func (Pet) Edges() []ent.Edge {
    return []ent.Edge{
        edge.From("owner", User.Type).
            Ref("pets").
            Unique(),
    }
}
 
 

說明:
如您所見,一個User實體能夠擁有寵物,可是一個Pet實體只能擁有一我的。
在關係定義中,pets邊是O2M(一對多)關係,owner邊是M2O(多對一)關係。
該User schema 擁有該pets/owner關係,由於它使用edge.To,而且該Pet schema 僅具備使用edge.From該Ref方法聲明的對其的反向引用。
該Ref方法描述了User咱們要引用的架構的哪一個邊,由於從一個架構到另外一個架構能夠有多個引用。
邊/關係的基數能夠使用該Unique方法進行控制,下面將對其進行更普遍的說明。
users / groups:
groupspa

 
package schema
import (
    "github.com/facebookincubator/ent"
    "github.com/facebookincubator/ent/schema/edge"
)
// Group schema.
type Group struct {
    ent.Schema
}
// Fields of the group.
func (Group) Fields() []ent.Field {
    return []ent.Field{
        // ...
    }
}
// Edges of the group.
func (Group) Edges() []ent.Edge {
    return []ent.Edge{
        edge.To("users", User.Type),
    }
}
 
 

usercode

package schema
import (
    "github.com/facebookincubator/ent"
    "github.com/facebookincubator/ent/schema/edge"
)
// User schema.
type User struct {
    ent.Schema
}
// Fields of the user.
func (User) Fields() []ent.Field {
    return []ent.Field{
        // ...
    }
}
// Edges of the user.
func (User) Edges() []ent.Edge {
    return []ent.Edge{
        edge.From("groups", Group.Type).
            Ref("users"),
        // "pets" declared in the example above.
        edge.To("pets", Pet.Type),
    }
}
 

說明:
能夠看到,一個組實體能夠有許多用戶,一個用戶實體能夠有許多組。
在關係定義中,users邊是M2M(多對多)關係,groups 邊也是M2M(多對多)關係blog

To && From

edge.To和edge.From是用於建立邊/關係的2個構建器。
使用edge.To構建器定義邊的模式擁有該關係,與使用edge.From僅爲該關係提供後向引用(使用不一樣名稱)的構建器不一樣ip

說明

關於詳細的o2o 以及M2M o2M 使用以及關係的方向能夠參考官方文檔文檔

參考資料

https://entgo.io/docs/schema-edges/get

相關文章
相關標籤/搜索