@@ -11,6 +11,7 @@ import (
11
11
"gorm.io/driver/postgres"
12
12
"gorm.io/driver/sqlite"
13
13
"gorm.io/gorm"
14
+ "gorm.io/gorm/logger"
14
15
)
15
16
16
17
var (
@@ -263,3 +264,50 @@ func TestPostgres(t *testing.T) {
263
264
require .Equal (t , int64 (2 ), user .Version .Int64 )
264
265
require .Equal (t , uint (18 ), user .Age )
265
266
}
267
+
268
+ func TestFullSaveAssociation (t * testing.T ) {
269
+ DB , err := gorm .Open (sqlite .Open (":memory:" ), & gorm.Config {})
270
+ require .Nil (t , err )
271
+
272
+ type Order struct {
273
+ ID uint64
274
+ Amount int64
275
+ Version Version
276
+ }
277
+ type User struct {
278
+ ID uint64
279
+ FirstName string
280
+ LastName string
281
+ Orders []* Order `gorm:"many2many:user_orders"`
282
+ Version Version
283
+ }
284
+
285
+ _ = DB .AutoMigrate (& User {}, & Order {})
286
+
287
+ u := User {
288
+ ID : 1000 ,
289
+ FirstName : "aaa" ,
290
+ LastName : "bbb" ,
291
+ Orders : []* Order {
292
+ {
293
+ ID : 2000 ,
294
+ Amount : 5000 ,
295
+ },
296
+ },
297
+ }
298
+
299
+ require .Nil (t , DB .Save (& u ).Error )
300
+
301
+ u .Orders [0 ].Amount = 6000
302
+ u .Orders [0 ].Version .Int64 = 1000
303
+ DB = DB .Session (& gorm.Session {
304
+ Logger : DB .Logger .LogMode (logger .Info ),
305
+ FullSaveAssociations : true ,
306
+ })
307
+ DB .Table ("users" ).Updates (& u )
308
+
309
+ var o Order
310
+ require .Nil (t , DB .First (& o ).Error )
311
+ require .Equal (t , int64 (6000 ), o .Amount )
312
+ require .Equal (t , int64 (1000 ), o .Version .Int64 )
313
+ }
0 commit comments