Files
ent/doc/md/code-gen.md
Ariel Mashraki 52b268c05c ent/doc: crud api
Reviewed By: alexsn

Differential Revision: D17094376

fbshipit-source-id: 9b1da24b99bb3ff15382b3a17516904decbca322
2019-08-28 11:23:03 -07:00

4.4 KiB
Executable File

id, title
id title
code-gen Introduction

Installation

ent comes with a codegen tool called entc. In order to install entc run the following command:

go get github.com/facebookincubator/ent/entc/cmd/entc

Initialize A New Schema

In order to generate one or more schema templates, run entc init as follows:

entc init User Pet

init will created the 2 schemas (user.go and pet.go) under ent/schema. If the ent directory does not exist, it will create it as well. The convention is to have an ent directory under the root directory of the project.

Generate Assets

After adding a few fields and edges, you want to generate the assets for working with your entities. Run the following command:

entc generate ./ent/schema

You should note, that goimports is required for the codegen, and it can be installed using:

go get -u golang.org/x/tools/cmd/goimports

The generate command generates the following assets for the schemas:

  • Client and Tx objects used for interacting with the graph.
  • CRUD builders for each schema type. See CRUD for more info.
  • Entity object (Go struct) for each of the schema type.
  • Package contains constants and predicates used for interacting with the builders.
  • A migrate package, for SQL dialects. See Migration for more info.

Code Generation Options

For more info about codegen options, run entc generate -h:

generate go code for the schema directory

Usage:
  entc generate [flags] path

Examples:
  entc generate ./ent/schema
  entc generate github.com/a8m/x

Flags:
      --header string         override codegen header
  -h, --help                  help for generate
      --idtype [int string]   type of the id field (default int)
      --storage strings       list of storage drivers to support (default [sql])
      --target string         target directory for codegen

Schema Description

In order to get a description of your graph schema, run:

entc describe ./ent/schema

An example for the output, is as follows:

Pet:
	+-------+---------+--------+----------+----------+---------+---------------+-----------+-----------------------+------------+
	| Field |  Type   | Unique | Optional | Nillable | Default | UpdateDefault | Immutable |       StructTag       | Validators |
	+-------+---------+--------+----------+----------+---------+---------------+-----------+-----------------------+------------+
	| id    | int     | false  | false    | false    | false   | false         | false     | json:"id,omitempty"   |          0 |
	| name  | string  | false  | false    | false    | false   | false         | false     | json:"name,omitempty" |          0 |
	+-------+---------+--------+----------+----------+---------+---------------+-----------+-----------------------+------------+
	+-------+------+---------+---------+----------+--------+----------+
	| Edge  | Type | Inverse | BackRef | Relation | Unique | Optional |
	+-------+------+---------+---------+----------+--------+----------+
	| owner | User | true    | pets    | M2O      | true   | true     |
	+-------+------+---------+---------+----------+--------+----------+
	
User:
	+-------+---------+--------+----------+----------+---------+---------------+-----------+-----------------------+------------+
	| Field |  Type   | Unique | Optional | Nillable | Default | UpdateDefault | Immutable |       StructTag       | Validators |
	+-------+---------+--------+----------+----------+---------+---------------+-----------+-----------------------+------------+
	| id    | int     | false  | false    | false    | false   | false         | false     | json:"id,omitempty"   |          0 |
	| age   | int     | false  | false    | false    | false   | false         | false     | json:"age,omitempty"  |          0 |
	| name  | string  | false  | false    | false    | false   | false         | false     | json:"name,omitempty" |          0 |
	+-------+---------+--------+----------+----------+---------+---------------+-----------+-----------------------+------------+
	+------+------+---------+---------+----------+--------+----------+
	| Edge | Type | Inverse | BackRef | Relation | Unique | Optional |
	+------+------+---------+---------+----------+--------+----------+
	| pets | Pet  | false   |         | O2M      | false  | true     |
	+------+------+---------+---------+----------+--------+----------+