SetColumn set column's value stmt.SetColumn("Name", "jinzhu") // Hooks Method stmt.SetColumn("Name", "jinzhu", true) // Callbacks Method
(name string, value interface{}, fromCallbacks ...bool)
| 585 | // stmt.SetColumn("Name", "jinzhu") // Hooks Method |
| 586 | // stmt.SetColumn("Name", "jinzhu", true) // Callbacks Method |
| 587 | func (stmt *Statement) SetColumn(name string, value interface{}, fromCallbacks ...bool) { |
| 588 | if v, ok := stmt.Dest.(map[string]interface{}); ok { |
| 589 | v[name] = value |
| 590 | } else if v, ok := stmt.Dest.([]map[string]interface{}); ok { |
| 591 | for _, m := range v { |
| 592 | m[name] = value |
| 593 | } |
| 594 | } else if stmt.Schema != nil { |
| 595 | if field := stmt.Schema.LookUpField(name); field != nil { |
| 596 | destValue := reflect.ValueOf(stmt.Dest) |
| 597 | for destValue.Kind() == reflect.Ptr { |
| 598 | destValue = destValue.Elem() |
| 599 | } |
| 600 | |
| 601 | if stmt.ReflectValue != destValue { |
| 602 | if !destValue.CanAddr() { |
| 603 | destValueCanAddr := reflect.New(destValue.Type()) |
| 604 | destValueCanAddr.Elem().Set(destValue) |
| 605 | stmt.Dest = destValueCanAddr.Interface() |
| 606 | destValue = destValueCanAddr.Elem() |
| 607 | } |
| 608 | |
| 609 | switch destValue.Kind() { |
| 610 | case reflect.Struct: |
| 611 | stmt.AddError(field.Set(stmt.Context, destValue, value)) |
| 612 | default: |
| 613 | stmt.AddError(ErrInvalidData) |
| 614 | } |
| 615 | } |
| 616 | |
| 617 | switch stmt.ReflectValue.Kind() { |
| 618 | case reflect.Slice, reflect.Array: |
| 619 | if len(fromCallbacks) > 0 { |
| 620 | for i := 0; i < stmt.ReflectValue.Len(); i++ { |
| 621 | stmt.AddError(field.Set(stmt.Context, stmt.ReflectValue.Index(i), value)) |
| 622 | } |
| 623 | } else { |
| 624 | stmt.AddError(field.Set(stmt.Context, stmt.ReflectValue.Index(stmt.CurDestIndex), value)) |
| 625 | } |
| 626 | case reflect.Struct: |
| 627 | if !stmt.ReflectValue.CanAddr() { |
| 628 | stmt.AddError(ErrInvalidValue) |
| 629 | return |
| 630 | } |
| 631 | |
| 632 | stmt.AddError(field.Set(stmt.Context, stmt.ReflectValue, value)) |
| 633 | } |
| 634 | } else { |
| 635 | stmt.AddError(ErrInvalidField) |
| 636 | } |
| 637 | } else { |
| 638 | stmt.AddError(ErrInvalidField) |
| 639 | } |
| 640 | } |
| 641 | |
| 642 | // Changed check model changed or not when updating |
| 643 | func (stmt *Statement) Changed(fields ...string) bool { |