MCPcopy
hub / github.com/go-gorm/gorm / SetColumn

Method SetColumn

statement.go:587–640  ·  view source on GitHub ↗

SetColumn set column's value stmt.SetColumn("Name", "jinzhu") // Hooks Method stmt.SetColumn("Name", "jinzhu", true) // Callbacks Method

(name string, value interface{}, fromCallbacks ...bool)

Source from the content-addressed store, hash-verified

585// stmt.SetColumn("Name", "jinzhu") // Hooks Method
586// stmt.SetColumn("Name", "jinzhu", true) // Callbacks Method
587func (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
643func (stmt *Statement) Changed(fields ...string) bool {

Callers 3

ModifyStatementMethod · 0.80
BeforeCreateMethod · 0.80
BeforeUpdateMethod · 0.80

Calls 6

LookUpFieldMethod · 0.80
LenMethod · 0.80
NewMethod · 0.65
TypeMethod · 0.65
SetMethod · 0.65
AddErrorMethod · 0.65

Tested by 2

BeforeCreateMethod · 0.64
BeforeUpdateMethod · 0.64