protected SqlContentEntityStorageSchema::createEntitySchemaIndexes(array $entity_schema, FieldStorageDefinitionInterface $storage_definition = NULL)
Creates the specified entity schema indexes and keys.
Parameters
array $entity_schema: The entity schema definition.
\Drupal\Core\Field\FieldStorageDefinitionInterface|null $storage_definition: (optional) If a field storage definition is specified, only indexes and keys involving its columns will be processed. Otherwise all defined entity indexes and keys will be processed.
File
- core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php, line 1451
Class
- SqlContentEntityStorageSchema
- Defines a schema handler that supports revisionable, translatable entities.
Namespace
Drupal\Core\Entity\Sql
Code
protected function createEntitySchemaIndexes(array $entity_schema, FieldStorageDefinitionInterface $storage_definition = NULL) { $schema_handler = $this->database->schema(); if ($storage_definition) { $table_mapping = $this->storage->getTableMapping(); $column_names = $table_mapping->getColumnNames($storage_definition->getName()); } $index_keys = [ 'indexes' => 'addIndex', 'unique keys' => 'addUniqueKey', ]; foreach ($this->getEntitySchemaData($this->entityType, $entity_schema) as $table_name => $schema) { // Add fields schema because database driver may depend on this data to // perform index normalization. $schema['fields'] = $entity_schema[$table_name]['fields']; foreach ($index_keys as $key => $add_method) { if (!empty($schema[$key])) { foreach ($schema[$key] as $name => $specifier) { // If a set of field columns were specified we process only indexes // involving them. Only indexes for which all columns exist are // actually created. $create = FALSE; $specifier_columns = array_map(function($item) { return is_string($item) ? $item : reset($item); }, $specifier); if (!isset($column_names) || array_intersect($specifier_columns, $column_names)) { $create = TRUE; foreach ($specifier_columns as $specifier_column_name) { // This may happen when adding more than one field in the same // update run. Eventually when all field columns have been // created the index will be created too. if (!$schema_handler->fieldExists($table_name, $specifier_column_name)) { $create = FALSE; break; } } } if ($create) { $this->{$add_method}($table_name, $name, $specifier, $schema); } } } } } }
Please login to continue.