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'); } } }
private function synchronizeProperties($object, $properties) { $props = array(); foreach ($properties as $property) { $props[$property->key_name] = $property; } // Removed all meta from database if this property not exists in new property list $keys = array_keys($props); foreach ($object->metas as $objectMetaData) { if (!isset($keys[$objectMetaData->meta->key_name])) { ObjectMetaData::model()->deleteByPk($objectMetaData->id); } unset($keys[$objectMetaData->meta->key_name]); } // Add or Update all properties foreach ($properties as $property) { $meta = MetaDataKey::model()->find('key_name = :name', array('name' => $property->key_name)); if (is_null($meta) || !isset($meta)) { throw new Exception('Property not found'); } $objectProperty = ObjectMetaData::model()->find('object_id = :objid and meta_key_id = :metaid', array('objid' => $object->id, 'metaid' => $meta->id)); if (is_null($objectProperty) || !isset($objectProperty)) { $objectProperty = new ObjectMetaData(); $objectProperty->object_id = $object->id; $objectProperty->meta_key_id = $meta->id; } $objectProperty->meta_value = $property->value; if (!$objectProperty->save()) { throw new Exception('Could not save ObjectProperty'); } } }
public function remove($object) { return MetaDataKey::model()->deleteByPk($object->id); }