public FieldConfigStorage::loadByProperties(array $conditions = array())
Load entities by their property values.
Parameters
array $values: An associative array where the keys are the property names and the values are the values those properties must have.
Return value
\Drupal\Core\Entity\EntityInterface[] An array of entity objects indexed by their ids.
Overrides EntityStorageBase::loadByProperties
File
- core/modules/field/src/FieldConfigStorage.php, line 98
Class
- FieldConfigStorage
- Controller class for fields.
Namespace
Drupal\field
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | public function loadByProperties( array $conditions = array ()) { // Include deleted fields if specified in the $conditions parameters. $include_deleted = isset( $conditions [ 'include_deleted' ]) ? $conditions [ 'include_deleted' ] : FALSE; unset( $conditions [ 'include_deleted' ]); $fields = array (); // Get fields stored in configuration. If we are explicitly looking for // deleted fields only, this can be skipped, because they will be // retrieved from state below. if ( empty ( $conditions [ 'deleted' ])) { if (isset( $conditions [ 'entity_type' ]) && isset( $conditions [ 'bundle' ]) && isset( $conditions [ 'field_name' ])) { // Optimize for the most frequent case where we do have a specific ID. $id = $conditions [ 'entity_type' ] . '.' . $conditions [ 'bundle' ] . '.' . $conditions [ 'field_name' ]; $fields = $this ->loadMultiple( array ( $id )); } else { // No specific ID, we need to examine all existing fields. $fields = $this ->loadMultiple(); } } // Merge deleted fields (stored in state) if needed. if ( $include_deleted || ! empty ( $conditions [ 'deleted' ])) { $deleted_fields = $this ->state->get( 'field.field.deleted' ) ? : array (); $deleted_storages = $this ->state->get( 'field.storage.deleted' ) ? : array (); foreach ( $deleted_fields as $id => $config ) { // If the field storage itself is deleted, inject it directly in the field. if (isset( $deleted_storages [ $config [ 'field_storage_uuid' ]])) { $config [ 'field_storage' ] = $this ->entityManager->getStorage( 'field_storage_config' )->create( $deleted_storages [ $config [ 'field_storage_uuid' ]]); } $fields [ $id ] = $this ->create( $config ); } } // Collect matching fields. $matching_fields = array (); foreach ( $fields as $field ) { // Some conditions are checked against the field storage. $field_storage = $field ->getFieldStorageDefinition(); // Only keep the field if it matches all conditions. foreach ( $conditions as $key => $value ) { // Extract the actual value against which the condition is checked. switch ( $key ) { case 'field_name' : $checked_value = $field_storage ->getName(); break ; case 'field_id' : case 'field_storage_uuid' : $checked_value = $field_storage ->uuid(); break ; case 'uuid' : $checked_value = $field ->uuid(); break ; case 'deleted' : $checked_value = $field ->isDeleted(); break ; default : $checked_value = $field ->get( $key ); break ; } // Skip to the next field as soon as one condition does not match. if ( $checked_value != $value ) { continue 2; } } // When returning deleted fields, key the results by UUID since they // can include several fields with the same ID. $key = $include_deleted ? $field ->uuid() : $field ->id(); $matching_fields [ $key ] = $field ; } return $matching_fields ; } |
Please login to continue.