-
-
Save MustafaRaarujeed/93190b38d17dd5340b9323c57b635efd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use \Drupal\field\Entity\FieldConfig; | |
use \Drupal\field\Entity\FieldStorageConfig; | |
/** | |
* Change field_number from Number (integer) to Text (formatted) | |
*/ | |
function field_migration_medium_update_9001() { | |
$entityType = 'node'; | |
$oldFieldName = 'field_number'; | |
$table = $entityType . '__' . $oldFieldName; | |
$revisionTable = $entityType . '_revision__' . $oldFieldName; | |
$newFieldsArray = []; | |
$database = \Drupal::database(); | |
$rows = NULL; | |
$revisionRows = NULL; | |
if ($database->schema()->tableExists($table)) { | |
$rows = $database->select($table, 'n')->fields('n')->execute() | |
->fetchAll(); | |
$revisionRows = $database->select($revisionTable, 'n')->fields('n')->execute() | |
->fetchAll(); | |
} | |
// Get field storage config. | |
$fieldStorage = FieldStorageConfig::loadByName($entityType, $oldFieldName); | |
// Check if field storage config exist. | |
if (is_null($fieldStorage)) { | |
return t('Field Storage does not exist'); | |
} | |
$newFieldStorage = $fieldStorage->toArray(); | |
$newFieldStorage['type'] = 'text'; | |
$newFieldStorage['settings'] = array( | |
'max_length' => 255 | |
); | |
foreach ($fieldStorage->getBundles() as $bundle => $label) { | |
$field = FieldConfig::loadByName($entityType, $bundle, $oldFieldName); | |
$newField = $field->toArray(); | |
$newField['field_type'] = 'text'; | |
$newField['settings'] = array( | |
'max_length' => 255 | |
); | |
$newFieldsArray[] = $newField; | |
} | |
$fieldStorage->delete(); | |
field_purge_batch(40); | |
// Create new field storage. | |
$newFieldStorage = FieldStorageConfig::create($newFieldStorage); | |
$newFieldStorage->save(); | |
// Create new fields. | |
foreach ($newFieldsArray as $field) { | |
$fieldConfig = FieldConfig::create($field); | |
$fieldConfig->save(); | |
} | |
// Restore existing data in new fields. | |
if (!is_null($rows)) { | |
foreach ($rows as $row) { | |
$database->insert($table) | |
->fields((array) $row) | |
->execute(); | |
} | |
} | |
if (!is_null($revisionRows)) { | |
foreach ($revisionRows as $row) { | |
$database->insert($revisionTable) | |
->fields((array) $row) | |
->execute(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment