db.Select("Name").Create(&user) // INSERT INTO "users" (name) VALUES ("jinzhu", 1, 2);
db.Omit("BillingAddress").Create(&user) // Skip create BillingAddress when creating a user
db.Omit(clause.Associations).Create(&user) // Skip all associations when creating a user
Association Mode
Association Mode contains some commonly used helper methods to handle relationships
// Start Association Mode var user User db.Model(&user).Association("Languages") // `user` is the source model, it must contains primary key // `Languages` is a relationship's field name // If the above two requirements matched, the AssociationMode should be started successfully, or it should return error db.Model(&user).Association("Languages").Error
Remove all reference between source & association, won’t delete those associations
db.Model(&user).Association("Languages").Clear()
Count Associations
Return the count of current associations
db.Model(&user).Association("Languages").Count()
// Count with conditions codes := []string{"zh-CN", "en-US", "ja-JP"} db.Model(&user).Where("code IN ?", codes).Association("Languages").Count()
Batch Data
Association Mode supports batch data, e.g:
// Find all roles for all users db.Model(&users).Association("Role").Find(&roles)
// Delete User A from all users's team db.Model(&users).Association("Team").Delete(&userA)
// Get unduplicated count of members in all user's team db.Model(&users).Association("Team").Count()
// For `Append`, `Replace` with batch data, arguments's length need to equal to data's length or will return error var users = []User{user1, user2, user3} // e.g: we have 3 users, Append userA to user1's team, append userB to user2's team, append userA, userB and userC to user3's team db.Model(&users).Association("Team").Append(&userA, &userB, &[]User{userA, userB, userC}) // Reset user1's team to userA,reset user2's team to userB, reset user3's team to userA, userB and userC db.Model(&users).Association("Team").Replace(&userA, &userB, &[]User{userA, userB, userC})