id | title |
---|---|
schema-def |
Introduction |
Schema describes the definition of one entity type in the graph, like User
or Group
,
and can contain the following configurations:
- Entity fields (or properties), like: name or age of a
User
. - Entity edges (or relations), like:
User
's groups, orUser
's friends. - Database specific options, like: indexes or unique indexes.
Here's an example of a schema:
package schema
import (
"entgo.io/ent"
"entgo.io/ent/schema/field"
"entgo.io/ent/schema/edge"
"entgo.io/ent/schema/index"
)
type User struct {
ent.Schema
}
func (User) Fields() []ent.Field {
return []ent.Field{
field.Int("age"),
field.String("name"),
field.String("nickname").
Unique(),
}
}
func (User) Edges() []ent.Edge {
return []ent.Edge{
edge.To("groups", Group.Type),
edge.To("friends", User.Type),
}
}
func (User) Indexes() []ent.Index {
return []ent.Index{
index.Fields("age", "name").
Unique(),
}
}
Entity schemas are usually stored inside ent/schema
directory under
the root directory of your project, and can be generated by entc
as follows:
go run entgo.io/ent/cmd/ent init User Group
:::note
Pleae note, that Client
is a reserved Go struct and cannot be used as schema name. For database tables
named client
, please use an annotation as mentioned here.
:::
If you are used to the definition of relations over edges, that's fine.
The modeling is the same. You can model with ent
whatever you can model
with other traditional ORMs.
There are many examples in this website that can help you get started
in the Edges section.