function flag_update_8401 in Flag 8.4
Fix schema changes in 4.0-alpha2.
File
- ./
flag.install, line 103 - Flag module install/schema/update hooks.
Code
function flag_update_8401() {
$bundle_schema = [
'description' => 'The Flag ID.',
'type' => 'varchar_ascii',
'length' => \Drupal\Core\Entity\EntityTypeInterface::BUNDLE_MAX_LENGTH,
// 'binary' => FALSE,
'not null' => TRUE,
];
/** @var \Drupal\Core\Database\Schema $schema */
$schema = \Drupal::database()
->schema();
$schema
->changeField('flagging', 'flag_id', 'flag_id', $bundle_schema);
$schema
->dropIndex('flagging', 'flag_id');
$schema
->dropIndex('flagging', 'flagging_field__flag_id__target_id');
$schema
->addIndex('flagging', 'flagging_field__flag_id__target_id', [
'flag_id',
], [
'fields' => [
'flag_id' => $bundle_schema,
],
]);
// Update the field storage repository.
/** @var \Drupal\Core\Entity\EntityFieldManagerInterface $efm */
$efm = \Drupal::service('entity_field.manager');
/** @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface $kv */
$kv = \Drupal::service('keyvalue');
/** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $repo */
$repo = \Drupal::service('entity.last_installed_schema.repository');
$efm
->clearCachedFieldDefinitions();
$storage_definition = $efm
->getFieldStorageDefinitions('flagging')['flag_id'];
$repo
->setLastInstalledFieldStorageDefinition($storage_definition);
// Update the stored field schema.
// @todo: There has to be a better way to do this.
$kv_collection = 'entity.storage_schema.sql';
$kv_name = 'flagging.field_schema_data.flag_id';
$field_schema = $kv
->get($kv_collection)
->get($kv_name);
$field_schema['flagging']['fields']['flag_id'] = $bundle_schema;
$field_schema['flagging']['indexes']['flagging_field__flag_id__target_id'] = [
'flag_id',
];
$kv
->get($kv_collection)
->set($kv_name, $field_schema);
}