traitPrepare(); // If the prepare() method from the trait decided that we need to alter this // query, we need to re-define the the key fields for fetchAllKeyed() as SQL // expressions. if ($this->sqlQuery->getMetaData('active_workspace_id')) { $id_field = $this->entityType->getKey('id'); $revision_field = $this->entityType->getKey('revision'); // Since the query is against the base table, we have to take into account // that the revision ID might come from the workspace_association // relationship, and, as a consequence, the revision ID field is no longer // a simple SQL field but an expression. $this->sqlFields = []; $this->sqlExpressions[$revision_field] = "COALESCE(workspace_association.target_entity_revision_id, base_table.$revision_field)"; $this->sqlExpressions[$id_field] = "base_table.$id_field"; } return $this; } /** * {@inheritdoc} */ protected function finish() { foreach ($this->sqlExpressions as $alias => $expression) { $this->sqlQuery->addExpression($expression, $alias); } return parent::finish(); } }