Used to insert a field with an existing ID but a new version number.
abstract public insertExistingField ( eZ\Publish\SPI\Persistence\Content $content, eZ\Publish\SPI\Persistence\Content\Field $field, |
||
$content | eZ\Publish\SPI\Persistence\Content | |
$field | eZ\Publish\SPI\Persistence\Content\Field | |
$value |
/** * Inserts an existing field. * * Used to insert a field with an exsting ID but a new version number. * * @param Content $content * @param Field $field * @param StorageFieldValue $value * * @return void */ public function insertExistingField(Content $content, Field $field, StorageFieldValue $value) { try { return $this->innerGateway->insertExistingField($content, $field, $value); } catch (DBALException $e) { throw new RuntimeException('Database error', 0, $e); } catch (PDOException $e) { throw new RuntimeException('Database error', 0, $e); } }
/** * Creates an existing field in a new version, no new ID is generated. * * Used to insert a field with an existing ID but a new version number. * $content is used for new version data, needed by Content gateway and external storage. * * External data is being copied here as some FieldTypes require original field external data. * By default copying falls back to storing, it is upon external storage implementation to override * the behaviour as needed. * * @param Field $field * @param Content $content * * @return void */ protected function createExistingFieldInNewVersion(Field $field, Content $content) { $originalField = clone $field; $field->versionNo = $content->versionInfo->versionNo; $this->contentGateway->insertExistingField($content, $field, $this->mapper->convertToStorageValue($field)); // If the storage handler returns true, it means that $field value has been modified // So we need to update it in order to store those modifications // Field converter is called once again via the Mapper if ($this->storageHandler->copyFieldData($content->versionInfo, $field, $originalField) === true) { $this->contentGateway->updateField($field, $this->mapper->convertToStorageValue($field)); } }