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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 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.