You are here

public function QueryTrait::prepare in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/workspaces/src/EntityQuery/QueryTrait.php \Drupal\workspaces\EntityQuery\QueryTrait::prepare()
2 calls to QueryTrait::prepare()
Query::prepare in core/modules/workspaces/src/EntityQuery/Query.php
Prepares the basic query with proper metadata/tags and base fields.
QueryAggregate::prepare in core/modules/workspaces/src/EntityQuery/QueryAggregate.php
Prepares the basic query with proper metadata/tags and base fields.

File

core/modules/workspaces/src/EntityQuery/QueryTrait.php, line 45

Class

QueryTrait
Provides workspaces-specific helpers for altering entity queries.

Namespace

Drupal\workspaces\EntityQuery

Code

public function prepare() {
  parent::prepare();

  // Do not alter entity revision queries.
  // @todo How about queries for the latest revision? Should we alter them to
  //   look for the latest workspace-specific revision?
  if ($this->allRevisions) {
    return $this;
  }

  // Only alter the query if the active workspace is not the default one and
  // the entity type is supported.
  if ($this->workspaceManager
    ->hasActiveWorkspace() && $this->workspaceManager
    ->isEntityTypeSupported($this->entityType)) {
    $active_workspace = $this->workspaceManager
      ->getActiveWorkspace();
    $this->sqlQuery
      ->addMetaData('active_workspace_id', $active_workspace
      ->id());
    $this->sqlQuery
      ->addMetaData('simple_query', FALSE);

    // LEFT JOIN 'workspace_association' to the base table of the query so we
    // can properly include live content along with a possible workspace
    // revision.
    $id_field = $this->entityType
      ->getKey('id');
    $this->sqlQuery
      ->leftJoin('workspace_association', 'workspace_association', "[%alias].[target_entity_type_id] = '{$this->entityTypeId}' AND [%alias].[target_entity_id] = [base_table].[{$id_field}] AND [%alias].[workspace] = '{$active_workspace->id()}'");
  }
  return $this;
}