Saving and deleting objects in Corma is very easy. Create your object via createObject(), set call the save() or saveAll() methods on the ObjectMapper to insert or update your objects, call delete() or deleteAll() to delete objects. Unlike Doctrine ORM, everything is executed immediately, there is no flush method.
$object = $orm->createObject(YourDataObject::class);
//Call setters...
$orm->save($object); //insert
//Call more setters...
$orm->save($object); //update
//Call more setters on $object...
$objects = [$object];
$newObject = $orm->createObject(YourDataObject::class);
//call setters on $newObject..
$objects[] = $newObject;
$orm->saveAll($objects); //1 update 1 insert
$orm->deleteAll($objects;
Saving Associated Entities
Corma's save() and saveAll() repository methods do not save any associations, so you must override save() in order to save associated entities.
class YourDataObjectRepository extend ObjectRepository
{
public function save(DataObjectInterface $object)
{
/** @var $object YourDataObject **/
try {
$this->db->beginTransaction();
parent::save($object)
//save a one-to-many relationship
$items = $object->getItems();
foreach($items as $item) {
$item->setYourDataObjectId($object->getId());
}
$this->objectMapper->saveAll($items);
//save a many-to-many relationship
if(!empty($object->getAssociatedIds())) {
$associatedRows = [];
$this->db->delete('link_table', ['objectId'=>$object->getId()]);
foreach($user->getAssociatedIds() as $id) {
$associatedRows[] = ['objectId'=>$object->getId(), 'roleId'=>$id];
}
$this->queryHelper->massInsert('link_table', $associatedRows);
}
$this->db->commit();
} catch(\Exception $e) {
$this->db->rollBack();
throw $e;
}
}
}
Events
Symfony events are dispatched for every stage of the object lifecycle. ObjectName here is the class without namespace.
- DataObject.beforeSave
- DataObject.{ObjectName}.beforeSave
- DataObject.beforeInsert
- DataObject.{ObjectName}.beforeInsert
- DataObject.beforeUpdate
- DataObject.{ObjectName}.beforeUpdate
- DataObject.afterSave
- DataObject.{ObjectName}.afterSave
- DataObject.afterInsert
- DataObject.{ObjectName}.afterInsert
- DataObject.afterUpdate
- DataObject.{ObjectName}.afterUpdate
- DataObject.beforeDelete
- DataObject.{ObjectName}.beforeDelete
- DataObject.afterDelete
- DataObject.{ObjectName}.afterDelete