Summary: {F206501895}
Reviewed By: alexsn
Differential Revision: D17182079
fbshipit-source-id: 9311fc8b3f2608b9cd5ae5cd0a805b0cf73c4029
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 create the 2 schemas (user.go and pet.go) under the ent/schema directory.
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:
ClientandTxobjects 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 types.
- Package containing constants and predicates used for interacting with the builders.
- A
migratepackage 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 |
+------+------+---------+---------+----------+--------+----------+