From e85b080178c499f3fb6ca0b92b2cf98ce387c2f1 Mon Sep 17 00:00:00 2001 From: Ariel Mashraki Date: Thu, 29 Aug 2019 07:23:25 -0700 Subject: [PATCH] ent/doc: add crud code examples to doc Reviewed By: alexsn Differential Revision: D17110486 fbshipit-source-id: 5575b9f63769744bf2fe5f8f27f83ab6446db6e5 --- doc/md/crud.md | 135 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 130 insertions(+), 5 deletions(-) diff --git a/doc/md/crud.md b/doc/md/crud.md index 0fa1c762c..cf74ab57c 100755 --- a/doc/md/crud.md +++ b/doc/md/crud.md @@ -95,12 +95,137 @@ func main() { ## Create An Entity -## Update An Entity +**Save** a user. -## Update Many Entities +```go +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. +``` -## Query An Entity +**SaveX** a user; Unlike **Save**, **SaveX** panics if an error occurs. -## Delete An Entity +```go +pedro := client.Pet. // PetClient. + Create(). // User create builder. + SetName("pedro"). // Set field value. + SetOwner(a8m). // Set owner (unique edge). + SaveX(ctx) // Create and return. +``` -## Delete Entities \ No newline at end of file +## Update One + +If an entity that already returned from the database. + +```go +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 + +```go +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. + +```go +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. + +```go +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. +```go +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. +```go +users, err := a8m. + QueryFollowers(). + All(ctx) +``` + +Get all pets of the followers of a user. +```go +users, err := a8m. + QueryFollowers(). + QueryPets(). + All(ctx) +``` +More advance traversals can be found in the [next section](traversals.md). + +## Delete One + +Delete an entity. + +```go +err := client.User. + DeleteOne(a8m). + Exec(ctx) +``` + +Delete by id. + +```go +err := client.User. + DeleteOneID(id). + Exec(ctx) +``` + +## Delete Many + +Delete using predicates. + +```go +err := client.File. + Delete(). + Where(file.UpdatedAtLT(date)) + Exec(ctx) +``` \ No newline at end of file