protected Query::loadRecords()
Loads the config records to examine for the query.
Return value
array Config records keyed by entity IDs.
File
- core/lib/Drupal/Core/Config/Entity/Query/Query.php, line 120
Class
- Query
- Defines the entity query for configuration entities.
Namespace
Drupal\Core\Config\Entity\Query
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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | protected function loadRecords() { $prefix = $this ->entityType->getConfigPrefix() . '.' ; $prefix_length = strlen ( $prefix ); // Search the conditions for restrictions on configuration object names. $names = FALSE; $id_condition = NULL; $id_key = $this ->entityType->getKey( 'id' ); if ( $this ->condition->getConjunction() == 'AND' ) { $lookup_keys = $this ->entityType->getLookupKeys(); $conditions = $this ->condition->conditions(); foreach ( $conditions as $condition_key => $condition ) { $operator = $condition [ 'operator' ] ? : ( is_array ( $condition [ 'value' ]) ? 'IN' : '=' ); if ( is_string ( $condition [ 'field' ]) && ( $operator == 'IN' || $operator == '=' )) { // Special case ID lookups. if ( $condition [ 'field' ] == $id_key ) { $ids = ( array ) $condition [ 'value' ]; $names = array_map ( function ( $id ) use ( $prefix ) { return $prefix . $id ; }, $ids ); } elseif (in_array( $condition [ 'field' ], $lookup_keys )) { // If we don't find anything then there are no matches. No point in // listing anything. $names = array (); $keys = ( array ) $condition [ 'value' ]; $keys = array_map ( function ( $value ) use ( $condition ) { return $condition [ 'field' ] . ':' . $value ; }, $keys ); foreach ( $this ->getConfigKeyStore()->getMultiple( $keys ) as $list ) { $names = array_merge ( $names , $list ); } } } // Save the first ID condition that is not an 'IN' or '=' for narrowing // down later. elseif (! $id_condition && $condition [ 'field' ] == $id_key ) { $id_condition = $condition ; } // We stop at the first restricting condition on name. In the case where // there are additional restricting conditions, results will be // eliminated when the conditions are checked on the loaded records. if ( $names !== FALSE) { // If the condition has been responsible for narrowing the list of // configuration to check there is no point in checking it further. unset( $conditions [ $condition_key ]); break ; } } } // If no restrictions on IDs were found, we need to parse all records. if ( $names === FALSE) { $names = $this ->configFactory->listAll( $prefix ); } // In case we have an ID condition, try to narrow down the list of config // objects to load. if ( $id_condition && ! empty ( $names )) { $value = $id_condition [ 'value' ]; $filter = NULL; switch ( $id_condition [ 'operator' ]) { case '<>' : $filter = function ( $name ) use ( $value , $prefix_length ) { $id = substr ( $name , $prefix_length ); return $id !== $value ; }; break ; case 'STARTS_WITH' : $filter = function ( $name ) use ( $value , $prefix_length ) { $id = substr ( $name , $prefix_length ); return strpos ( $id , $value ) === 0; }; break ; case 'CONTAINS' : $filter = function ( $name ) use ( $value , $prefix_length ) { $id = substr ( $name , $prefix_length ); return strpos ( $id , $value ) !== FALSE; }; break ; case 'ENDS_WITH' : $filter = function ( $name ) use ( $value , $prefix_length ) { $id = substr ( $name , $prefix_length ); return strrpos ( $id , $value ) === strlen ( $id ) - strlen ( $value ); }; break ; } if ( $filter ) { $names = array_filter ( $names , $filter ); } } // Load the corresponding records. $records = array (); foreach ( $this ->configFactory->loadMultiple( $names ) as $config ) { $records [ substr ( $config ->getName(), $prefix_length )] = $config ->get(); } return $records ; } |
Please login to continue.