// Copyright 2019-present Facebook Inc. All rights reserved. // This source code is licensed under the Apache 2.0 license found // in the LICENSE file in the root directory of this source tree. package main import ( "context" "fmt" "log" "time" "github.com/facebookincubator/ent/examples/o2o2types/ent" _ "github.com/mattn/go-sqlite3" ) func main() { client, err := ent.Open("sqlite3", "file:ent?mode=memory&cache=shared&_fk=1") if err != nil { log.Fatalf("failed opening connection to sqlite: %v", err) } defer client.Close() ctx := context.Background() // run the auto migration tool. if err := client.Schema.Create(ctx); err != nil { log.Fatalf("failed creating schema resources: %v", err) } if err := Do(ctx, client); err != nil { log.Fatal(err) } } func Do(ctx context.Context, client *ent.Client) error { a8m, err := client.User. Create(). SetAge(30). SetName("Mashraki"). Save(ctx) if err != nil { return fmt.Errorf("creating user: %v", err) } log.Println("user:", a8m) card1, err := client.Card. Create(). SetOwner(a8m). SetNumber("1020"). SetExpired(time.Now().Add(time.Minute)). Save(ctx) if err != nil { return fmt.Errorf("creating card: %v", err) } log.Println("card:", card1) // Only returns the card of the user, // and expects that there's only one. card2, err := a8m.QueryCard().Only(ctx) if err != nil { return fmt.Errorf("querying card: %v", err) } log.Println("card:", card2) // The Card entity is able to query its owner using // its back-reference. owner, err := card2.QueryOwner().Only(ctx) if err != nil { return fmt.Errorf("querying owner: %v", err) } log.Println("owner:", owner) return nil }