Удалите вложенные объекты синтаксического анализа, расположенные в массиве, при удалении родительской записи

#ios #swift #parse-platform #back4app #pfobject

Вопрос:

У меня есть пользовательский класс Invoice , который содержит массив пользовательских классов InvoiceItems.

Когда я удаляю Invoice , я хотел бы удалить все записи, связанные с ним. В настоящее время, когда я удалил Invoice элементы счета-фактуры, они все еще перечислены в базе данных.

Я предполагал, что при удалении родительских записей он должен удалять вложенные элементы, так как я использую массив, а не отношение или указатель.

 func removeInvoice(with invoice: Invoice, completion: @escaping (Result<Bool, NSError>) -> ()) {
        
        guard let invoiceObjectId = invoice.getPFInvoice()?.objectId else {
            let error = NSError(domain: "OURTEAM", code: 0, userInfo: [NSLocalizedDescriptionKey: "Remove invoice failure"])
            completion(.failure(error))
            return
        }
        
        let query = PFQuery(className: "Invoice")
        query.whereKey("objectId", equalTo: invoiceObjectId)
        
        query.findObjectsInBackground { (objects, error) in
            
            if let unwrappedError = error as NSError? {
                completion(.failure(unwrappedError))
            }
            
            if let unwrappedObjects = objects {
                
                for object in unwrappedObjects {
                    object.deleteEventually()
                }
                
                completion(.success(true))
            }
        }
    }
 

Ответ №1:

Вы можете создать и удалить триггер afterDelete для удаления дочерних элементов:

 Parse.Cloud.afterDelete('Invoice', ({ object }) => {
  return Parse.Object.destroyAll(object.get('arrayField'));
});