2016-06-03 3 views
0

Я понимаю, что царство работает подобно mongodb. Мой вопрос: что, если я хочу удалить детей и их детей (в основном, всю ветвь данных, начиная с узла, который я удаляю)?Удаление детей при удалении родителя в царстве

This question дал мне некоторое представление о том, как отношения работают в сфере. Но я все еще смущен.

ответ

2

Каскадные удаления еще не поддерживаются в Realm. Пока эта функция не поддерживается, вам необходимо удалить дочерние объекты вручную. Что-то вроде следующего может работать:

function deleteObjectGraph(object, type, realm) { 
    let objectSchema = realm.schema.find((objectSchema) => objectSchema.name == type); 

    // delete all child objects 
    for (let propName in objectSchema.properties) { 
     let prop = objectSchema.properties[propName]; 

     // for list properties delete all elements and their children 
     if (prop.type == 'list') { 
      object[propName].forEach((listObject) => 
       deleteObjectGraph(listObject, prop.objectType, realm); 
      ); 
     } 

     // for object properties delete object and all children 
     if (prop.type == 'object' && object[propName] != null) { 
      deleteObjectGraph(object[propName], prop.objectType, realm); 
     } 
    } 

    // delete the object 
    realm.delete(object); 
} 

Я не проверял это, и это не будет работать для круговых графиков объекта или могут возникнуть проблемы в тех случаях, когда объекты повторно.

Смежные вопросы