#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'));
});