Guest User

Untitled

a guest
Feb 8th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.18 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "log"
  6.  
  7. "github.com/jinzhu/gorm"
  8. _ "github.com/lib/pq"
  9. )
  10.  
  11. type Language struct {
  12. ID uint `gorm:"primary_key"`
  13. Name string
  14. }
  15.  
  16. type Movie struct {
  17. ID uint `gorm:"primary_key"`
  18. Title string
  19. Language Language
  20. LanguageID uint
  21. }
  22.  
  23. type Artist struct {
  24. ID uint `gorm:"primary_key"`
  25. Name string
  26. Movies []Movie `gorm:"many2many:artist_movies"`
  27. }
  28.  
  29. func createArtists() {
  30. langs := []Language{{Name: "english"},
  31. {Name: "tamil"},
  32. {Name: "hindi"}}
  33.  
  34. for i, _ := range langs {
  35. if err := db.Create(&langs[i]).Error; err != nil {
  36. log.Fatal(err)
  37. }
  38. }
  39.  
  40. movies := []Movie{
  41. {Title: "Nayagan", Language: langs[1]},
  42. {Title: "Anbe sivam", Language: langs[1]},
  43. {Title: "3 idiots", Language: langs[2]},
  44. {Title: "Shamithab", Language: langs[2]},
  45. {Title: "Dark Knight", Language: langs[0]},
  46. {Title: "310 to Yuma", Language: langs[0]},
  47. }
  48. for i, _ := range movies {
  49. if err := db.Create(&movies[i]).Error; err != nil {
  50. log.Fatal(err)
  51. }
  52. }
  53.  
  54. artists := []Artist{{Name: "Madhavan", Movies: []Movie{movies[1], movies[2]}},
  55. {Name: "Kamal Hassan", Movies: []Movie{movies[0], movies[1]}},
  56. {Name: "Dhanush", Movies: []Movie{movies[3]}},
  57. {Name: "Aamir Khan", Movies: []Movie{movies[2]}},
  58. {Name: "Amitabh Bachchan", Movies: []Movie{movies[3]}},
  59. {Name: "Christian Bale", Movies: []Movie{movies[4], movies[5]}},
  60. {Name: "Russell Crowe", Movies: []Movie{movies[5]}},
  61. }
  62.  
  63. for i, _ := range artists {
  64. if err := db.Create(&artists[i]).Error; err != nil {
  65. log.Fatal(err)
  66. }
  67. }
  68. }
  69.  
  70. var db *gorm.DB
  71.  
  72. func main() {
  73. var err error
  74. db, err := gorm.Open("postgres", "host=192.168.150.242 user=postgres dbname=iris_community sslmode=disable password=admino0o0oo0")
  75. if err != nil {
  76. log.Fatal(err)
  77. }
  78. db.AutoMigrate(new(Language), new(Movie), new(Artist))
  79. //createArtists()
  80.  
  81. langs := []Language{{Name: "english"},
  82. {Name: "tamil"},
  83. {Name: "hindi"}}
  84.  
  85. for i, _ := range langs {
  86. if err := db.Create(&langs[i]).Error; err != nil {
  87. log.Fatal(err)
  88. }
  89. }
  90.  
  91. movies := []Movie{
  92. {Title: "Nayagan", Language: langs[1]},
  93. {Title: "Anbe sivam", Language: langs[1]},
  94. {Title: "3 idiots", Language: langs[2]},
  95. {Title: "Shamithab", Language: langs[2]},
  96. {Title: "Dark Knight", Language: langs[0]},
  97. {Title: "310 to Yuma", Language: langs[0]},
  98. }
  99. for i, _ := range movies {
  100. if err := db.Create(&movies[i]).Error; err != nil {
  101. log.Fatal(err)
  102. }
  103. }
  104.  
  105. artistss := []Artist{{Name: "Madhavan", Movies: []Movie{movies[1], movies[2]}},
  106. {Name: "Kamal Hassan", Movies: []Movie{movies[0], movies[1]}},
  107. {Name: "Dhanush", Movies: []Movie{movies[3]}},
  108. {Name: "Aamir Khan", Movies: []Movie{movies[2]}},
  109. {Name: "Amitabh Bachchan", Movies: []Movie{movies[3]}},
  110. {Name: "Christian Bale", Movies: []Movie{movies[4], movies[5]}},
  111. {Name: "Russell Crowe", Movies: []Movie{movies[5]}},
  112. }
  113.  
  114. for i, _ := range artistss {
  115. if err := db.Create(&artistss[i]).Error; err != nil {
  116. log.Fatal(err)
  117. }
  118. }
  119.  
  120.  
  121. // Get the list of all artist who acted in "english" movies
  122. var artists []Artist
  123. if err = db.Joins("JOIN artist_movies on artist_movies.artist_id=artists.id").
  124. Joins("JOIN movies on movies.id=artist_movies.movie_id").
  125. Joins("JOIN languages on movies.language_id=languages.id").
  126. Where("languages.name=?", "tamil").
  127. Group("artists.id").Preload("Movies").Find(&artists).Error; err != nil {
  128. log.Fatal(err)
  129. }
  130. for _, ar := range artists {
  131. fmt.Println(ar.Name)
  132. }
  133.  
  134. // Get the list the artists for movie "Nayagan"
  135. artists = []Artist{}
  136. if err = db.Joins("JOIN artist_movies on artist_movies.artist_id=artists.id").
  137. Joins("JOIN movies on artist_movies.movie_id=movies.id").Where("movies.title=?", "Nayagan").
  138. Group("artists.id").Find(&artists).Error; err != nil {
  139. log.Fatal(err)
  140. }
  141.  
  142. for _, ar := range artists {
  143. fmt.Println(ar.Name)
  144. }
  145.  
  146. // Get the list of artists for movies "3 idiots", "Shamitab" and "310 to Yuma"
  147. artists = []Artist{}
  148.  
  149. if err = db.Joins("JOIN artist_movies on artist_movies.artist_id=artists.id").
  150. Joins("JOIN movies on artist_movies.movie_id=movies.id").
  151. Where("movies.title in (?)", []string{"3 idiots", "Shamitabh", "310 to Yuma"}).
  152. Group("artists.id").Find(&artists).Error; err != nil {
  153. log.Fatal(err)
  154. }
  155. for _, ar := range artists {
  156. fmt.Println(ar.Name)
  157. }
  158. }
Add Comment
Please, Sign In to add comment