update hooks
my_module.install
<?php
/**
* Change my_basefield max_length to 255.
*/
function my_module_update_10001() {
$entity_type_id = 'my_entity';
$field_name = 'my_basefield';
$field_length = 255;
/** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $schema_repository */
$schema_repository = \Drupal::service('entity.last_installed_schema.repository');
/** @var \Drupal\Core\Entity\EntityFieldManager $entity_field_manager */
$entity_field_manager = \Drupal::service('entity_field.manager');
/** @var Drupal\Core\Field\BaseFieldDefinition[] $base_field_definitions */
$base_field_definitions = $entity_field_manager->getBaseFieldDefinitions($entity_type_id);
$schema_repository->setLastInstalledFieldStorageDefinition($base_field_definitions[$field_name]);
$field_storage_definitions = $schema_repository->getLastInstalledFieldStorageDefinitions($entity_type_id);
// Update the serialized schema property.
$rc = new \ReflectionClass($field_storage_definitions[$field_name]);
$schema_property = $rc->getProperty('schema');
$schema_property->setAccessible(TRUE);
$schema = $field_storage_definitions[$field_name]->getSchema();
$schema['columns']['value']['length'] = $field_length;
$schema_property->setValue($field_storage_definitions[$field_name], $schema);
// Update the field definition in the last installed schema repository.
$schema_repository->setLastInstalledFieldStorageDefinitions($entity_type_id, $field_storage_definitions);
// Update the storage schema.
$key_value = \Drupal::keyValue('entity.storage_schema.sql');
$key_name = $entity_type_id . '.field_schema_data.' . $field_name;
$storage_schema = $key_value->get($key_name);
// Update all tables where the field is present.
foreach ($storage_schema as &$table_schema) {
$table_schema['fields'][$field_name]['length'] = $field_length;
}
$key_value->set($key_name, $storage_schema);
// Update the database tables where the field is part of.
$db = Drupal::database();
foreach ($storage_schema as $table_name => $table_schema) {
$db->schema()->changeField($table_name, $field_name, $field_name, $table_schema['fields'][$field_name]);
}
}
29.01.2026 | Marc Hitscherich
Increasing the length of a basefield with data
⚠️ WARNING: Potential data loss. Use with caution.
scp_base.module
/**
* Run missing database schema updates.
*/
function mymodule_update_10001(&$sandbox) {
$entity_type_manager = \Drupal::entityTypeManager();
$entity_type_manager->clearCachedDefinitions();
$change_summary = \Drupal::service('entity.definition_update_manager')->getChangeSummary();
foreach ($change_summary as $entity_type_id => $change_list) {
$entity_type = $entity_type_manager->getDefinition($entity_type_id);
\Drupal::entityDefinitionUpdateManager()->installEntityType($entity_type);
}
}
07.05.2026 | Peter Gerken
Run missing entity Schema updates
custom_module.install
<?php
/**
* Update node title of all nodes.
*/
function custom_module_update_10001(&$sandbox) {
// Define you entity type.
$entity_type = 'node';
// Load the entity type manager service.
$entity_type_manager = \Drupal::service('entity_type.manager');
// Get the storage for the entity type.
$entity_storage = $entity_type_manager->getStorage($entity_type);
if (!isset($sandbox['total'])) {
$all_entity_ids = $entity_storage->getQuery()
->accessCheck()
->execute();
$sandbox['total'] = count($all_entity_ids);
$sandbox['current'] = 0;
if (empty($sandbox['total'])) {
$sandbox['#finished'] = 1;
return;
}
}
$entities_per_batch = 25;
$entity_ids = $entity_storage->getQuery()
->accessCheck()
->range($sandbox['current'], $entities_per_batch)
->execute();
if (empty($entity_ids)) {
$sandbox['#finished'] = 1;
return;
}
// Optionally, perform operations with the loaded entities.
// For example, load and modify each node and set a new title.
foreach ($entity_ids as $entity_id) {
$entity = $entity_storage->load($entity_id);
if ($entity->hasField('title')) {
$entity->setTitle('New Title');
}
$entity->save();
$sandbox['current']++;
}
\Drupal::messenger()
->addMessage($sandbox['current'] . ' users processed.');
if ($sandbox['current'] >= $sandbox['total']) {
$sandbox['#finished'] = 1;
}
else {
$sandbox['#finished'] = ($sandbox['current'] / $sandbox['total']);
}
}
21.05.2026 | Michael Ebert