function hook_update_N
Same name in other branches
- 7.x modules/system/system.api.php \hook_update_N()
- 9 core/lib/Drupal/Core/Extension/module.api.php \hook_update_N()
- 8.9.x core/lib/Drupal/Core/Extension/module.api.php \hook_update_N()
- 10 core/lib/Drupal/Core/Extension/module.api.php \hook_update_N()
Related topics
133 functions implement hook_update_N()
Note: this list is generated by pattern matching, so it may include some functions that are not actually implementations of this hook.
- block_content_update_last_removed in core/
modules/ block_content/ block_content.install - Implements hook_update_last_removed().
- block_post_update_make_weight_integer in core/
modules/ block/ block.post_update.php - Ensures that all block weights are integers.
- block_update_last_removed in core/
modules/ block/ block.install - Implements hook_update_last_removed().
- comment_update_last_removed in core/
modules/ comment/ comment.install - Implements hook_update_last_removed().
- content_moderation_update_last_removed in core/
modules/ content_moderation/ content_moderation.install - Implements hook_update_last_removed().
File
-
core/
lib/ Drupal/ Core/ Extension/ module.api.php, line 782
Code
function hook_update_N(&$sandbox) {
// For non-batch updates, the signature can simply be:
// function hook_update_N() {
// Example function body for adding a field to a database table, which does
// not require a batch operation:
$spec = [
'type' => 'varchar',
'description' => "New Col",
'length' => 20,
'not null' => FALSE,
];
$schema = Database::getConnection()->schema();
$schema->addField('my_table', 'newcol', $spec);
// Example of what to do if there is an error during your update.
if ($some_error_condition_met) {
throw new UpdateException('Something went wrong; here is what you should do.');
}
// Example function body for a batch update. In this example, the values in
// a database field are updated.
if (!isset($sandbox['progress'])) {
// This must be the first run. Initialize the sandbox.
$sandbox['progress'] = 0;
$sandbox['current_pk'] = 0;
$sandbox['max'] = Database::getConnection()->query('SELECT COUNT([my_primary_key]) FROM {my_table}')
->fetchField();
}
// Update in chunks of 20.
$records = Database::getConnection()->select('my_table', 'm')
->fields('m', [
'my_primary_key',
'other_field',
])
->condition('my_primary_key', $sandbox['current_pk'], '>')
->range(0, 20)
->orderBy('my_primary_key', 'ASC')
->execute();
foreach ($records as $record) {
// Here, you would make an update something related to this record. In this
// example, some text is added to the other field.
Database::getConnection()->update('my_table')
->fields([
'other_field' => $record->other_field . '-suffix',
])
->condition('my_primary_key', $record->my_primary_key)
->execute();
$sandbox['progress']++;
$sandbox['current_pk'] = $record->my_primary_key;
}
$sandbox['#finished'] = empty($sandbox['max']) ? 1 : $sandbox['progress'] / $sandbox['max'];
// To display a message to the user when the update is completed, return it.
// If you do not want to display a completion message, return nothing.
return t('All foo bars were updated with the new suffix');
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.