function QueryTrait::prepare

Same name in other branches
  1. 8.9.x core/modules/workspaces/src/EntityQuery/QueryTrait.php \Drupal\workspaces\EntityQuery\QueryTrait::prepare()
  2. 10 core/modules/workspaces/src/EntityQuery/QueryTrait.php \Drupal\workspaces\EntityQuery\QueryTrait::prepare()
  3. 11.x 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;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.