You are here

protected function Query::prepare in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/lib/Drupal/Core/Entity/Query/Sql/Query.php \Drupal\Core\Entity\Query\Sql\Query::prepare()

Prepares the basic query with proper metadata/tags and base fields.

Return value

\Drupal\Core\Entity\Query\Sql\Query Returns the called object.

Throws

\Drupal\Core\Entity\Query\QueryException Thrown if the base table does not exist.

1 call to Query::prepare()
QueryAggregate::prepare in core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php
Prepares the basic query with proper metadata/tags and base fields.
1 method overrides Query::prepare()
QueryAggregate::prepare in core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php
Prepares the basic query with proper metadata/tags and base fields.

File

core/lib/Drupal/Core/Entity/Query/Sql/Query.php, line 101
Contains \Drupal\Core\Entity\Query\Sql\Query.

Class

Query
The SQL storage entity query class.

Namespace

Drupal\Core\Entity\Query\Sql

Code

protected function prepare() {
  if ($this->allRevisions) {
    if (!($base_table = $this->entityType
      ->getRevisionTable())) {
      throw new QueryException("No revision table for " . $this->entityTypeId . ", invalid query.");
    }
  }
  else {
    if (!($base_table = $this->entityType
      ->getBaseTable())) {
      throw new QueryException("No base table for " . $this->entityTypeId . ", invalid query.");
    }
  }
  $simple_query = TRUE;
  if ($this->entityType
    ->getDataTable()) {
    $simple_query = FALSE;
  }
  $this->sqlQuery = $this->connection
    ->select($base_table, 'base_table', array(
    'conjunction' => $this->conjunction,
  ));
  $this->sqlQuery
    ->addMetaData('entity_type', $this->entityTypeId);
  $id_field = $this->entityType
    ->getKey('id');

  // Add the key field for fetchAllKeyed().
  if (!($revision_field = $this->entityType
    ->getKey('revision'))) {

    // When there is no revision support, the key field is the entity key.
    $this->sqlFields["base_table.{$id_field}"] = array(
      'base_table',
      $id_field,
    );

    // Now add the value column for fetchAllKeyed(). This is always the
    // entity id.
    $this->sqlFields["base_table.{$id_field}" . '_1'] = array(
      'base_table',
      $id_field,
    );
  }
  else {

    // When there is revision support, the key field is the revision key.
    $this->sqlFields["base_table.{$revision_field}"] = array(
      'base_table',
      $revision_field,
    );

    // Now add the value column for fetchAllKeyed(). This is always the
    // entity id.
    $this->sqlFields["base_table.{$id_field}"] = array(
      'base_table',
      $id_field,
    );
  }
  if ($this->accessCheck) {
    $this->sqlQuery
      ->addTag($this->entityTypeId . '_access');
  }
  $this->sqlQuery
    ->addTag('entity_query');
  $this->sqlQuery
    ->addTag('entity_query_' . $this->entityTypeId);

  // Add further tags added.
  if (isset($this->alterTags)) {
    foreach ($this->alterTags as $tag => $value) {
      $this->sqlQuery
        ->addTag($tag);
    }
  }

  // Add further metadata added.
  if (isset($this->alterMetaData)) {
    foreach ($this->alterMetaData as $key => $value) {
      $this->sqlQuery
        ->addMetaData($key, $value);
    }
  }

  // This now contains first the table containing entity properties and
  // last the entity base table. They might be the same.
  $this->sqlQuery
    ->addMetaData('all_revisions', $this->allRevisions);
  $this->sqlQuery
    ->addMetaData('simple_query', $simple_query);
  return $this;
}