| 128 | } |
| 129 | |
| 130 | func TestForeignKeyConstraintsBelongsTo(t *testing.T) { |
| 131 | tidbSkip(t, "not support the foreign key feature") |
| 132 | |
| 133 | type Profile struct { |
| 134 | ID uint |
| 135 | Name string |
| 136 | Refer uint `gorm:"uniqueIndex"` |
| 137 | } |
| 138 | |
| 139 | type Member struct { |
| 140 | ID uint |
| 141 | Name string |
| 142 | ProfileID uint |
| 143 | Profile Profile `gorm:"Constraint:OnUpdate:CASCADE,OnDelete:CASCADE;FOREIGNKEY:ProfileID;References:Refer"` |
| 144 | } |
| 145 | |
| 146 | DB.Migrator().DropTable(&Profile{}, &Member{}) |
| 147 | |
| 148 | if err := DB.AutoMigrate(&Profile{}, &Member{}); err != nil { |
| 149 | t.Fatalf("Failed to migrate, got error: %v", err) |
| 150 | } |
| 151 | |
| 152 | member := Member{Name: "foreign_key_constraints_belongs_to", Profile: Profile{Name: "my_profile_belongs_to", Refer: 1}} |
| 153 | |
| 154 | DB.Create(&member) |
| 155 | |
| 156 | var profile Profile |
| 157 | if err := DB.First(&profile, "id = ?", member.Profile.ID).Error; err != nil { |
| 158 | t.Fatalf("failed to find profile, got error: %v", err) |
| 159 | } else if profile.Refer != member.ProfileID { |
| 160 | t.Fatalf("member id is not equal: expects: %v, got: %v", profile.Refer, member.ProfileID) |
| 161 | } |
| 162 | |
| 163 | DB.Model(&profile).Update("Refer", 100) |
| 164 | |
| 165 | var member2 Member |
| 166 | if err := DB.First(&member2, "id = ?", member.ID).Error; err != nil { |
| 167 | t.Fatalf("failed to find member, got error: %v", err) |
| 168 | } else if member2.ProfileID != 100 { |
| 169 | t.Fatalf("member id is not equal: expects: %v, got: %v", 100, member2.ProfileID) |
| 170 | } |
| 171 | |
| 172 | if r := DB.Delete(&profile); r.Error != nil || r.RowsAffected != 1 { |
| 173 | t.Fatalf("Should delete member, got error: %v, affected: %v", r.Error, r.RowsAffected) |
| 174 | } |
| 175 | |
| 176 | var result Member |
| 177 | if err := DB.First(&result, member.ID).Error; err == nil { |
| 178 | t.Fatalf("Should not find deleted member") |
| 179 | } |
| 180 | |
| 181 | if err := DB.First(&profile, profile.ID).Error; err == nil { |
| 182 | t.Fatalf("Should not find deleted profile") |
| 183 | } |
| 184 | } |
| 185 | |
| 186 | func TestFullSaveAssociations(t *testing.T) { |
| 187 | coupon := &Coupon{ |