Same name in this branch
  1. 10 core/lib/Drupal/Core/Database/Query/Query.php \Drupal\Core\Database\Query\Query::execute()
  2. 10 core/lib/Drupal/Core/Config/Entity/Query/Query.php \Drupal\Core\Config\Entity\Query\Query::execute()
  3. 10 core/lib/Drupal/Core/Entity/KeyValueStore/Query/Query.php \Drupal\Core\Entity\KeyValueStore\Query\Query::execute()
  4. 10 core/lib/Drupal/Core/Entity/Query/Null/Query.php \Drupal\Core\Entity\Query\Null\Query::execute()
  5. 10 core/lib/Drupal/Core/Entity/Query/Sql/Query.php \Drupal\Core\Entity\Query\Sql\Query::execute()
Same name and namespace in other branches
  1. 8.9.x core/lib/Drupal/Core/Config/Entity/Query/Query.php \Drupal\Core\Config\Entity\Query\Query::execute()
  2. 9 core/lib/Drupal/Core/Config/Entity/Query/Query.php \Drupal\Core\Config\Entity\Query\Query::execute()

Execute the query.

Return value

int|array Returns an integer for count queries or an array of ids. The values of the array are always entity ids. The keys will be revision ids if the entity supports revision and entity ids if not.

Overrides QueryInterface::execute

File

core/lib/Drupal/Core/Config/Entity/Query/Query.php, line 80

Class

Query
Defines the entity query for configuration entities.

Namespace

Drupal\Core\Config\Entity\Query

Code

public function execute() {

  // Invoke entity query alter hooks.
  $this
    ->alter();

  // Load the relevant config records.
  $configs = $this
    ->loadRecords();

  // Apply conditions.
  $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) {
      $properties = explode('.', $field);
      foreach ($properties as $property) {
        if (isset($a[$property]) || isset($b[$property])) {
          $a = $a[$property] ?? NULL;
          $b = $b[$property] ?? NULL;
        }
      }
      return $a <= $b ? $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;
}