public function Query::execute

Same name in this branch
  1. 8.x drupal/core/lib/Drupal/Core/Database/Query/Query.php \Drupal\Core\Database\Query\Query::execute()
  2. 8.x drupal/core/lib/Drupal/Core/Config/Entity/Query/Query.php \Drupal\Core\Config\Entity\Query\Query::execute()
  3. 8.x drupal/core/modules/field_sql_storage/lib/Drupal/field_sql_storage/Entity/Query.php \Drupal\field_sql_storage\Entity\Query::execute()

Implements \Drupal\Core\Entity\Query\QueryInterface::execute().

Overrides QueryInterface::execute

File

drupal/core/lib/Drupal/Core/Config/Entity/Query/Query.php, line 83
Contains \Drupal\Core\Config\Entity\Query\Query.

Class

Query
Defines the entity query for configuration entities.

Namespace

Drupal\Core\Config\Entity\Query

Code

public function execute() {

  // Load all config files.
  $entity_info = $this->entityManager
    ->getDefinition($this
    ->getEntityType());
  $prefix = $entity_info['config_prefix'];
  $prefix_length = strlen($prefix) + 1;
  $names = $this->configStorage
    ->listAll($prefix);
  $configs = array();
  foreach ($names as $name) {
    $configs[substr($name, $prefix_length)] = config($name)
      ->get();
  }
  $result = $this->condition
    ->compile($configs);

  // Apply sort settings.
  foreach ($this->sort as $sort) {
    $direction = $sort['direction'] == 'ASC' ? -1 : 1;
    $field = $sort['field'];
    uasort($result, function ($a, $b) use ($field, $direction) {
      return $a[$field] <= $b[$field] ? $direction : -$direction;
    });
  }

  // Let the pager do its work.
  $this
    ->initializePager();
  if ($this->range) {
    $result = array_slice($result, $this->range['start'], $this->range['length'], TRUE);
  }
  if ($this->count) {
    return count($result);
  }

  // Create the expected structure of entity_id => entity_id. Config
  // entities have string entity IDs.
  foreach ($result as $key => &$value) {
    $value = (string) $key;
  }
  return $result;
}