model.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package user
  2. import (
  3. "fmt"
  4. . "prime/basic"
  5. "gorm.io/gorm"
  6. )
  7. type User struct {
  8. gorm.Model
  9. Username string `gorm:"not null;unique"`
  10. Password string `gorm:"not null"`
  11. Friends []*User `gorm:"many2many:user_friends;"`
  12. Profile Profile `gorm:"not null"`
  13. }
  14. type Profile struct {
  15. // ID uint `gorm:"primarykey"`
  16. UserID uint
  17. Name string
  18. Avatar string
  19. }
  20. func Migrate() {
  21. db := DB()
  22. db.AutoMigrate(&User{})
  23. db.AutoMigrate(&Profile{})
  24. // db.Create(&User{Username: "foo", Password: "bar"})
  25. }
  26. func Test() {
  27. db := DB()
  28. users := []User{
  29. {Username: "foo", Password: "bar"},
  30. {Username: "ignatz", Password: "password"},
  31. {Username: "alice", Password: "123"},
  32. {Username: "bob", Password: "123"},
  33. }
  34. users[0].Friends = []*User{&users[1], &users[2]}
  35. users[1].Friends = []*User{&users[0]}
  36. users[2].Friends = []*User{&users[0], &users[3]}
  37. users[3].Friends = []*User{&users[2]}
  38. // 1-2 1-3 3-4
  39. // db.Create(&users)
  40. db.Find(&users)
  41. // db.Create(&User{Username: "admin", Password: "admin", Friends: []*User{&users[0]}})
  42. // printUsers(users)
  43. // users[0].Friends = append(users[0].Friends, &users[1])
  44. // db.Where(&users[0]).Association("Friends").Append(&users[1])
  45. // db.Save(&users)
  46. for _, user := range users {
  47. var friends []User
  48. db.Model(&user).Association("Friends").Find(&friends)
  49. var friendsID []uint
  50. for _, friend := range friends {
  51. friendsID = append(friendsID, friend.ID)
  52. }
  53. fmt.Printf("#%d %s, friends=%v\n", user.ID, user.Username, friendsID)
  54. }
  55. }