删除父记录时删除位于 Array 中的嵌套解析对象

Posted

技术标签:

【中文标题】删除父记录时删除位于 Array 中的嵌套解析对象【英文标题】:Remove nested parse objects located in Array when removing parent record 【发布时间】:2021-06-10 21:40:20 【问题描述】:

我有一个自定义类 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'));
);

【讨论】:

以上是关于删除父记录时删除位于 Array 中的嵌套解析对象的主要内容,如果未能解决你的问题,请参考以下文章

删除嵌套组中的重复项

删除父对象时如何删除由stream.flatMap创建的列表中的子对象?

如何在 bigquery 中删除 array_agg

大查询删除嵌套在 STRUCT 对象中的列

在 Python 中解析嵌套的 Json 以删除列中的特殊字符

如何解析 GraphQL 中的嵌套类型?