🥶

【Go】ent公式ドキュメントから理解するまで

2024/10/20に公開

docs:~ で公式ドキュメントのどこから取ってるか書いてます
途中参加のプロジェクトでentが使われてたのでキャッチアップ
全部網羅するとかではなくて何も知らない奴が公式docsから学びを得る過程を書いてます

定義場所

docs: Getting Started / Quick Introduction

ent/schema/hoge.goにfield等を定義

go generate ./ent

によって ent/ と ent/hoge/ にhogeに関するファイルが自動生成される

ent
├── schema
│   └── hoge.go
├── tx.go
├── hoge
│   ├── hoge.go
│   └── where.go
├── hoge.go
├── hoge_create.go
├── hoge_delete.go
├── hoge_query.go
└── hoge_update.go

その定義の仕方

docs: Schema / ~
フィールド, リレーションの定義の仕方などを書いてる

使う

docs: Code Generation / CRUD API

create

a8m, err := client.User.    // UserClient.
    Create().               // User create builder.
    SetName("a8m").         // Set field value.
    SetNillableAge(age).    // Avoid nil checks.
    AddGroups(g1, g2).      // Add many edges.
    SetSpouse(nati).        // Set unique edge.
    Save(ctx)               // Create and return.

setfield名(value)でsetしてる
よく見たら上で生成されたent/hoge_create.goに定義されてる

CRUD APIなのにReadについて全然かかれてないな...👀

update many

n, err := client.User.          // UserClient.
    Update().                   // User update builder.
    Where(                      //
        user.Or(                // (age >= 30 OR name = "bar") 
            user.AgeGT(30),     //
            user.Name("bar"),   // AND
        ),                      //  
        user.HasFollowers(),    // UserHasFollowers()  
    ).                          //
    SetName("foo").             // Set field name.
    Save(ctx)                   // exec and return.

お,where使ってる
AgeGT(30) -> age >= 30 ってことはGreater thanか
定義元にジャンプすると自動生成された ent/hoge/where.go にあった
ここにあるやつからwhereを使うっぽい

クエリを使いたい時はent/hoge_query.goから使うっぽい

終わり

これだけわかればとりあえず書けそう
他に必要そうなのあれば後から加えたのがわかるように追記します

Discussion