mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
Reviewed By: alexsn Differential Revision: D17110486 fbshipit-source-id: 5575b9f63769744bf2fe5f8f27f83ab6446db6e5
4.3 KiB
Executable File
4.3 KiB
Executable File
id, title
| id | title |
|---|---|
| crud | CRUD API |
As mentioned in the introduction section, running entc on the schemas,
will generate the following assets:
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 type.
- Package contains constants and predicates used for interacting with the builders.
- A
migratepackage, for SQL dialects. See Migration for more info.
Create A New Client
MySQL
package main
import (
"log"
"<project>/ent"
_ "github.com/go-sql-driver/mysql"
"github.com/facebookincubator/ent/dialect/sql"
)
func main() {
drv, err := sql.Open("mysql", "<user>:<pass>@tcp(<host>:<port>)/<database>?parseTime=True")
if err != nil {
log.Fatal(err)
}
defer drv.Close()
client := ent.NewClient(ent.Driver(drv))
}
SQLite
package main
import (
"log"
"<project>/ent"
_ "github.com/mattn/go-sqlite3"
"github.com/facebookincubator/ent/dialect/sql"
)
func main() {
drv, err := sql.Open("sqlite3", "file:ent?mode=memory&cache=shared&_fk=1")
if err != nil {
log.Fatal(err)
}
defer drv.Close()
client := ent.NewClient(ent.Driver(drv))
}
Gremlin (AWS Neptune)
package main
import (
"log"
"net/url"
"<project>/ent"
"github.com/facebookincubator/ent/dialect/gremlin"
)
func main() {
c, err := gremlin.NewClient(gremlin.Config{
Endpoint: gremlin.Endpoint{
URL: &url.URL{
Scheme: "http",
Host: "localhost:8182",
},
},
})
if err != nil {
log.Fatal(err)
}
client := ent.NewClient(ent.Driver(gremlin.NewDriver(c)))
}
Create An Entity
Save a user.
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.
SaveX a user; Unlike Save, SaveX panics if an error occurs.
pedro := client.Pet. // PetClient.
Create(). // User create builder.
SetName("pedro"). // Set field value.
SetOwner(a8m). // Set owner (unique edge).
SaveX(ctx) // Create and return.
Update One
If an entity that already returned from the database.
a8m, err = a8m.Update(). // User update builder.
RemoveGroup(g2). // Remove specific edge.
ClearCard(). // Clear unique edge.
SetAge(30). // Set field value
Save(ctx) // Save and return.
Update By ID
pedro, err := client.Pet. // PetClient.
UpdateOneID(id). // Pet update builder.
SetName("pedro"). // Set field name.
SetOwnerID(owner). // Set unique edge, using id.
Save(ctx) // Save and return.
Update Many
Filter using predicates.
n, err := client.User. // UserClient.
Update(). // Pet update builder.
Where( //
user.Or( // (age >= 30 OR name = "bar")
user.AgeEQ(30), //
user.Name("bar"), // AND
), //
user.HasFollowers(), // UserHasFollowers()
). //
SetName("foo"). // Set field name.
Save(ctx) // exec and return.
Query edge-predicates.
n, err := client.User. // UserClient.
Update(). // Pet update builder.
Where( //
user.HasFriendsWith( // UserHasFriendsWith (
user.Or( // age = 20
user.Age(20), // OR
user.Age(30), // age = 30
) // )
), //
). //
SetName("a8m"). // Set field name.
Save(ctx) // exec and return.
Query The Graph
Get all users with followers.
users, err := client.User. // UserClient.
Query(). // User query builder.
Where(user.HasFollowers()). // filter only users with followers.
All(ctx) // query and return.
Get all followers of a specific user; Start the traversal from a node in the graph.
users, err := a8m.
QueryFollowers().
All(ctx)
Get all pets of the followers of a user.
users, err := a8m.
QueryFollowers().
QueryPets().
All(ctx)
More advance traversals can be found in the next section.
Delete One
Delete an entity.
err := client.User.
DeleteOne(a8m).
Exec(ctx)
Delete by id.
err := client.User.
DeleteOneID(id).
Exec(ctx)
Delete Many
Delete using predicates.
err := client.File.
Delete().
Where(file.UpdatedAtLT(date))
Exec(ctx)