メインコンテンツへスキップする

アノテーション

スキーマアノテーションは、フィールドやエッジなどのスキーマオブジェクトにメタデータを付加し、それを外部テンプレートに注入することができます。 アノテーションは、JSON raw の値にシリアライズ可能なGoの型(struct,map,sliceなど)で、Annotation インターフェイスを実装している必要があります。

Ent内蔵のアノテーションにより、さまざまなストレージドライバー(SQLなど)を設定したり、コード生成の出力を制御したりすることができます。

カスタムテーブル名

entsql アノテーションを使用して、タイプにカスタムテーブル名を指定することができます。

package schema

import (
"entgo.io/ent"
"entgo.io/ent/dialect/entsql"
"entgo.io/ent/schema"
"entgo.io/ent/schema/field"
)

// User型は、Userエンティティのスキーマ定義を保持しています。
type User struct {
ent.Schema
}

// User型のアノテーション
func (User) Annotations() []schema.Annotation {
return []schema.Annotation{
entsql.Annotation{Table: "Users"},
}
}

// Userのフィールド
func (User) Fields() []ent.Field {
return []ent.Field{
field.Int("age"),
field.String("name"),
}
}

外部キーの設定

Entは外部キー生成をカスタマイズしたり、ON DELETE 句のreferential actionを設定できます。

package schema

import (
"entgo.io/ent"
"entgo.io/ent/dialect/entsql"
"entgo.io/ent/schema/edge"
"entgo.io/ent/schema/field"
)

// User型は、Userエンティティのスキーマ定義を保持しています。
type User struct {
ent.Schema
}

// Userのフィールド
func (User) Fields() []ent.Field {
return []ent.Field{
field.String("name").
Default("Unknown"),
}
}

// ユーザーのエッジ。
func (User) Edges() []ent.Edge {
return []ent.Edge{
edge.To("posts", Post.Type).
Annotations(entsql.Annotation{
OnDelete: entsql.Cascade,
}),
}
}

上の例では、親テーブルのレコードの削除を子テーブルの一致するレコードにカスケード(連鎖)するように外部キーを設定しています。