/** * Saves any unsaved changes in this context and it's Managed Objects into the Persistent Store * * @see MManagedObjectContext::hasChanges() * * @return bool Whether or not the save was successful */ public function save() { if ($this->hasChanges()) { $saveRequest = new MSaveRequest($this); $insertedObjects = new MMutableArray(); $updatedObjects = new MMutableArray(); foreach ($this->managedObjects()->toArray() as $object) { if ($object->hasChanges()) { if ($object->objectID() == MManagedObject::UNKNOWN_ID) { $insertedObjects->addObject($object); } else { $updatedObjects->addObject($object); } } } $saveRequest->setInsertManagedObjects($insertedObjects); $saveRequest->setUpdateManagedObjects($updatedObjects); $saveRequest->setDeleteManagedObjects($this->deletedObjects()); $affectedObjects = $this->persistentStoreCoordinator()->executeRequest($saveRequest); foreach ($affectedObjects->toArray() as $object) { if (!$this->deletedObjects->removeObject($object)) { $object->persistChanges(); } } return true; } else { return false; } }
/** * @internal * * @return MArray */ protected function executeSaveRequest(MSaveRequest $request) { $affectedObjects = new MMutableArray(); // Save new objects foreach ($request->insertManagedObjects()->toArray() as $object) { $this->saveManagedObject($object); $affectedObjects->addObject($object); } // Save updated objects foreach ($request->updateManagedObjects()->toArray() as $object) { $this->saveManagedObject($object); $affectedObjects->addObject($object); } // Remove deleted objects foreach ($request->deleteManagedObjects()->toArray() as $object) { $this->deleteManagedObject($object); $affectedObjects->addObject($object); } return $affectedObjects; }