GORM - CRUD
1. Create
u := User{Name: "Jason", Age: 18, Birthday: time.Now()}
db.NewRecord(u) // => true, since id is empty
db.Create(&u)
db.NewRecord(u) // => false
cb
func (u *User) BeforeCreate(scope *gorm.Scope) error {
scope.SetColumn("ID", uuid.New())
return nil
}
2. Read
// findAll
db.Find(&us)
//// SELECT * FROM users;
// - - - - - - - -
db.First(&u)
//// SELECT * FROM users ORDER BY id LIMIT 1;
db.Last(&u)
//// SELECT * FROM users ORDER BY id DESC LIMIT 1;
// - - - - - - - -
db.First(&u, 10)
//// SELECT * FROM users WHERE id = 10;
query
// find first matched
db.Where("name = ?", "jason").First(&u)
//// SELECT * FROM users WHERE name = 'jason' limit 1;
// find all matched
db.Where("name = ?", "jason").Find(&us)
//// SELECT * FROM users WHERE name = 'jason';
db.Where("name <> ?", "jason").Find(&us)
// - - - - -
db.Where("name in (?)", []string{"jason", "jason 2"}).Find(&us)
db.Where("name LIKE ?", "%jas%").Find(&us)
db.Where("name = ? AND age >= ?", "jason", "22").Find(&us)
db.Where("updated_at > ?", lastWeek).Find(&us)
db.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&us)
query by struct or map
// Struct
db.Where(&User{Name: "jason", Age: 20}).First(&u)
//// SELECT * FROM users WHERE name = "jason" AND age = 20 LIMIT 1;
db.Where(&User{Name: "jason", Age: 20}).Find(&us)
// Map
db.Where(map[string]interface{}{"name": "jason", "age": 20}).Find(&us)
//// SELECT * FROM users WHERE name = "jason" AND age = 20;
// id slice
db.Where([]int64{20, 21, 22}).Find(&us)
//// SELECT * FROM users WHERE id IN (20, 21, 22);
query not
db.Not([]int64{}).First(&u)
//// SELECT * FROM users;
// - - - - - - -
db.Not("name = ?", "jason").First(&u)
//// SELECT * FROM users WHERE NOT(name = "jason");
// Struct
db.Not(User{Name: "jason"}).First(&u)
//// SELECT * FROM users WHERE name <> "jason";
TBD 1.4.2
Last updated
Was this helpful?