Migrate integer fields to double in Drupal

PHOTO EMBED

Sun Aug 06 2023 20:20:32 GMT+0000 (Coordinated Universal Time)

Saved by @igor #drupal #mysql

$database = \Drupal::database();
  $entity_type_id = 'basic';
  $fields = [
    'employees',
    'employees_to_employ',
    'average_statistical_number_of_em',
  ];

  foreach ($fields as $field_name) {
    $old_rows = NULL;
    $table = $entity_type_id . '__' . $field_name;
    $new_fields_list = [];
    $field_storage = FieldStorageConfig::loadByName($entity_type_id, $field_name);

    if (!$field_storage) {
      continue;
    }

    // Get all current data from DB.
    if ($database->schema()->tableExists($table)) {
      // The table data to restore after the update is completed.
      $old_rows = $database->select($table, 'n')
        ->fields('n')
        ->execute()
        ->fetchAll();
    }

    // Use existing field config for new field.
    foreach ($field_storage->getBundles() as $bundle => $label) {
      if ($bundle !== 'partner_data') {
        continue;
      }
      $field = FieldConfig::loadByName($entity_type_id, $bundle, $field_name);
      $new_field = $field->toArray();
      $new_field['field_type'] = 'decimal';
      $new_fields_list[] = $new_field;
    }

    // Deleting field storage which will also delete bundles(fields).
    $new_field_storage = $field_storage->toArray();
    $new_field_storage['type'] = 'decimal';

    $field_storage->delete();

    // Purge field data now to allow new field and field_storage with same name
    // to be created.
    field_purge_batch(40);

    // Create new field storage.
    $new_field_storage = FieldStorageConfig::create($new_field_storage);
    $new_field_storage->save();

    // Create new fields.
    foreach ($new_fields_list as $new_field) {
      $new_field_config = FieldConfig::create($new_field);
      $new_field_config->save();
    }

    // Restore existing data in new table.
    if ($old_rows) {
      foreach ($old_rows as $row) {
        $database->insert($table)
          ->fields((array) $row)
          ->execute();
      }
    }
  }
content_copyCOPY

https://drupal.stackexchange.com/questions/208946/how-do-i-change-a-field-type/232663#232663