Anonymous View

Associations

Associations

Field helpers make it easy to touch parents and related records in one builder. Here’s how the generated structs combine.

Update parent fields and append children

err := gorm.G[User](db).
Where(generated.User.ID.Eq(userID)).
Set(
generated.User.Status.Set("active"),
generated.User.Profiles.Update(
generated.Profile.LastLogin.Set(time.Now()),
),
generated.User.Devices.Create(
generated.Device.Name.Set("iphone"),
generated.Device.PushToken.Set(token),
),
).
Update(ctx)

The generator emits helpers for each association (Profiles, Devices). Chain them inside the same Set(...) call alongside parent updates.

Replace many-to-many links

err := gorm.G[Team](db).
Where(generated.Team.ID.Eq(teamID)).
Set(
generated.Team.Members.Unlink(),
generated.Team.Members.CreateInBatch(newMembers),
).
Update(ctx)

Unlink clears existing join rows, and CreateInBatch seeds the new slice—no manual join-table work needed.

Create a parent with nested associations

err := gorm.G[Order](db).
Set(
generated.Order.Number.Set(nextNumber()),
generated.Order.Items.CreateInBatch([]models.OrderItem{
{SKU: "sku-1", Quantity: 2},
{SKU: "sku-2", Quantity: 1},
}),
generated.Order.Payments.Create(
generated.Payment.Provider.Set("stripe"),
generated.Payment.Status.Set("pending"),
),
).
Create(ctx)

A single Create(ctx) call inserts the parent and cascades through the generated association helpers.

Return to Transactions or the CLI overview.

Platinum Sponsors

Become a Sponsor!

Platinum Sponsors

Become a Sponsor!