private function synchronizeProperties($resourceType, $properties) { $propNames = array(); foreach ($properties as $prop) { $propNames[$prop->key_name] = $prop; } $keys = array_keys($propNames); foreach ($resourceType->metas as $resourceTypeMeta) { if (!isset($keys[$resourceTypeMeta->meta->key_name])) { ResourceTypeMetas::model()->deleteByPk($resourceTypeMeta->id); } unset($keys[$resourceTypeMeta->meta->key_name]); } foreach ($propNames as $propertyName => $property) { $meta = MetaDataKey::model()->find('key_name = :name', array('name' => $propertyName)); if (is_null($meta)) { $meta = new MetaDataKey(); $meta->key_name = $property->key_name; if (!$meta->save()) { throw new Exception('Could not save PROPERTY'); } } $relation = new ResourceTypeMetas(); $relation->resource_type_id = $resourceType->id; $relation->meta_key_id = $meta->id; if (!$relation->save()) { throw new Exception('Could not save RELATION'); } } }
public function save($object) { $model = MetaDataKey::model(); $transaction = $model->getDbConnection()->beginTransaction(); try { if (isset($object->id)) { $property = MetaDataKey::model()->findByPk($object->id); } if (!isset($property) || is_null($property)) { $property = new MetaDataKey(); } $property->key_name = $object->key_name; $property->descr = $object->descr; if (!$property->save()) { throw new Exception('Could not save PROPERTY'); } $transaction->commit(); } catch (Exception $e) { $transaction->rollback(); throw $e; } }