Fix Preload belongs to relations has same records
This commit is contained in:
parent
0fb4b7d9f0
commit
b3b87d9c45
@ -98,7 +98,6 @@ func Preload(scope *Scope) {
|
|||||||
object := reflect.Indirect(objects.Index(j))
|
object := reflect.Indirect(objects.Index(j))
|
||||||
if equalAsString(getFieldValue(object, relation.ForeignKey), value) {
|
if equalAsString(getFieldValue(object, relation.ForeignKey), value) {
|
||||||
object.FieldByName(field.Name).Set(result)
|
object.FieldByName(field.Name).Set(result)
|
||||||
break
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -6,6 +6,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func getPreloadUser(name string) User {
|
func getPreloadUser(name string) User {
|
||||||
|
var company Company
|
||||||
|
DB.Where(Company{Name: "preload"}).FirstOrCreate(&company)
|
||||||
|
|
||||||
return User{
|
return User{
|
||||||
Name: name,
|
Name: name,
|
||||||
Role: Role{"Preload"},
|
Role: Role{"Preload"},
|
||||||
@ -15,6 +18,7 @@ func getPreloadUser(name string) User {
|
|||||||
Emails: []Email{
|
Emails: []Email{
|
||||||
{Email: fmt.Sprintf("user_%v@example1.com", name)}, {Email: fmt.Sprintf("user_%v@example2.com", name)},
|
{Email: fmt.Sprintf("user_%v@example1.com", name)}, {Email: fmt.Sprintf("user_%v@example2.com", name)},
|
||||||
},
|
},
|
||||||
|
Company: company,
|
||||||
Languages: []Language{
|
Languages: []Language{
|
||||||
{Name: fmt.Sprintf("lang_1_%v", name)},
|
{Name: fmt.Sprintf("lang_1_%v", name)},
|
||||||
{Name: fmt.Sprintf("lang_2_%v", name)},
|
{Name: fmt.Sprintf("lang_2_%v", name)},
|
||||||
@ -36,6 +40,10 @@ func checkUserHasPreloadData(user User, t *testing.T) {
|
|||||||
t.Error("Failed to preload user's CreditCard")
|
t.Error("Failed to preload user's CreditCard")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if user.Company.Name != u.Company.Name {
|
||||||
|
t.Error("Failed to preload user's Company")
|
||||||
|
}
|
||||||
|
|
||||||
if len(user.Emails) != len(u.Emails) {
|
if len(user.Emails) != len(u.Emails) {
|
||||||
t.Error("Failed to preload user's Emails")
|
t.Error("Failed to preload user's Emails")
|
||||||
} else {
|
} else {
|
||||||
@ -58,9 +66,10 @@ func TestPreload(t *testing.T) {
|
|||||||
user1 := getPreloadUser("user1")
|
user1 := getPreloadUser("user1")
|
||||||
DB.Save(&user1)
|
DB.Save(&user1)
|
||||||
|
|
||||||
|
preloadDB := DB.Where("role = ?", "Preload").Preload("BillingAddress").Preload("ShippingAddress").
|
||||||
|
Preload("CreditCard").Preload("Emails").Preload("Company")
|
||||||
var user User
|
var user User
|
||||||
DB.Where("role = ?", "Preload").Preload("BillingAddress").Preload("ShippingAddress").
|
preloadDB.Find(&user)
|
||||||
Preload("CreditCard").Preload("Emails").Find(&user)
|
|
||||||
checkUserHasPreloadData(user, t)
|
checkUserHasPreloadData(user, t)
|
||||||
|
|
||||||
user2 := getPreloadUser("user2")
|
user2 := getPreloadUser("user2")
|
||||||
@ -70,23 +79,21 @@ func TestPreload(t *testing.T) {
|
|||||||
DB.Save(&user3)
|
DB.Save(&user3)
|
||||||
|
|
||||||
var users []User
|
var users []User
|
||||||
DB.Where("role = ?", "Preload").Preload("BillingAddress").Preload("ShippingAddress").
|
preloadDB.Find(&users)
|
||||||
Preload("CreditCard").Preload("Emails").Find(&users)
|
|
||||||
|
|
||||||
for _, user := range users {
|
for _, user := range users {
|
||||||
checkUserHasPreloadData(user, t)
|
checkUserHasPreloadData(user, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
var users2 []*User
|
var users2 []*User
|
||||||
DB.Where("role = ?", "Preload").Preload("BillingAddress").Preload("ShippingAddress").
|
preloadDB.Find(&users2)
|
||||||
Preload("CreditCard").Preload("Emails").Find(&users2)
|
|
||||||
|
|
||||||
for _, user := range users2 {
|
for _, user := range users2 {
|
||||||
checkUserHasPreloadData(*user, t)
|
checkUserHasPreloadData(*user, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
var users3 []*User
|
var users3 []*User
|
||||||
DB.Where("role = ?", "Preload").Preload("Emails", "email = ?", user3.Emails[0].Email).Find(&users3)
|
preloadDB.Preload("Emails", "email = ?", user3.Emails[0].Email).Find(&users3)
|
||||||
|
|
||||||
for _, user := range users3 {
|
for _, user := range users3 {
|
||||||
if user.Name == user3.Name {
|
if user.Name == user3.Name {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user