public static function saveRelation($parents, $document, $updateCache = true) { if ($parents) { try { $con = Propel::getConnection(); $con->begin(); $docId = $document->getId(); if (!is_array($parents)) { $parents = array($parents); } foreach ($parents as $parent) { $saveNew = true; if ($parent) { $parentId = $parent->getId(); $oldParentId = Document::getParentOf($docId, null, false); if ($oldParentId) { $relation = RelationPeer::retrieveByPk($oldParentId, $docId); if ($oldParentId != $parentId) { $relation->delete(); } else { $saveNew = false; } } if ($saveNew) { $relation = new Relation(); $relation->setId1($parentId); $relation->setId2($docId); $relation->setDocumentModel1(get_class($parent)); $relation->setDocumentModel2(get_class($document)); $relation->setSortOrder($relation->getNextSortOrder($parent, $document)); } $relation->save(); } } $con->commit(); if (sfConfig::get('sf_cache_relations') && $updateCache && $parentId) { self::updateRelationCache($parentId); } return true; } catch (Exception $e) { $con->rollback(); throw $e; } } }