Prechádzať zdrojové kódy

:art: Add Relation column to database table view https://github.com/siyuan-note/siyuan/issues/9888

Daniel 1 rok pred
rodič
commit
4adff64ddc
1 zmenil súbory, kde vykonal 34 pridanie a 25 odobranie
  1. 34 25
      kernel/model/attribute_view.go

+ 34 - 25
kernel/model/attribute_view.go

@@ -806,38 +806,47 @@ func updateAttributeViewColRelation(operation *Operation) (err error) {
 	}
 	}
 
 
 	for _, keyValues := range srcAv.KeyValues {
 	for _, keyValues := range srcAv.KeyValues {
-		if keyValues.Key.ID == operation.KeyID {
-			// 已经设置过双向关联的话需要先断开双向关联
-			if nil != keyValues.Key.Relation && keyValues.Key.Relation.IsTwoWay {
-				oldDestAv, parseErr := av.ParseAttributeView(keyValues.Key.Relation.AvID)
-				if nil == parseErr {
-					isOldSameAv := oldDestAv.ID == destAv.ID
-					if isOldSameAv {
-						oldDestAv = destAv
-					}
+		if keyValues.Key.ID != operation.KeyID {
+			continue
+		}
 
 
-					oldDestKey, _ := oldDestAv.GetKey(keyValues.Key.Relation.BackKeyID)
-					if nil != oldDestKey && nil != oldDestKey.Relation && oldDestKey.Relation.AvID == srcAv.ID && oldDestKey.Relation.IsTwoWay {
-						oldDestKey.Relation.IsTwoWay = false
-						oldDestKey.Relation.BackKeyID = ""
-					}
+		srcRel := keyValues.Key.Relation
+		// 已经设置过双向关联的话需要先断开双向关联
+		if nil != srcRel && srcRel.IsTwoWay {
+			oldDestAv, _ := av.ParseAttributeView(srcRel.AvID)
+			if nil != oldDestAv {
+				isOldSameAv := oldDestAv.ID == destAv.ID
+				if isOldSameAv {
+					oldDestAv = destAv
+				}
 
 
-					if !isOldSameAv {
-						err = av.SaveAttributeView(oldDestAv)
-						if nil != err {
-							return
-						}
+				oldDestKey, _ := oldDestAv.GetKey(srcRel.BackKeyID)
+				if nil != oldDestKey && nil != oldDestKey.Relation && oldDestKey.Relation.AvID == srcAv.ID && oldDestKey.Relation.IsTwoWay {
+					oldDestKey.Relation.IsTwoWay = false
+					oldDestKey.Relation.BackKeyID = ""
+				}
+
+				if !isOldSameAv {
+					err = av.SaveAttributeView(oldDestAv)
+					if nil != err {
+						return
 					}
 					}
 				}
 				}
 			}
 			}
+		}
 
 
-			keyValues.Key.Relation = &av.Relation{
-				AvID:      operation.ID,
-				IsTwoWay:  operation.IsTwoWay,
-				BackKeyID: operation.BackRelationKeyID,
-			}
-			break
+		srcRel = &av.Relation{
+			AvID:     operation.ID,
+			IsTwoWay: operation.IsTwoWay,
 		}
 		}
+
+		if operation.IsTwoWay {
+			srcRel.BackKeyID = operation.BackRelationKeyID
+		} else {
+			srcRel.BackKeyID = ""
+		}
+
+		break
 	}
 	}
 
 
 	destAdded := false
 	destAdded := false