diff -u b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php --- b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php +++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php @@ -665,32 +665,38 @@ // If a revision table is available, we need all the properties of the // latest revision. Otherwise we fall back to the data table. $table = $this->revisionDataTable ?: $this->dataTable; - $query = $this->database->select($this->dataTable, 'data', array('fetch' => \PDO::FETCH_ASSOC)) + $query = $this->database->select($table, 'data', array('fetch' => \PDO::FETCH_ASSOC)) ->fields('data') - ->condition("data.$this->idKey", array_keys($entities)) - ->orderBy("data.$this->idKey"); + ->condition('data.' . $this->idKey, array_keys($entities)) + ->orderBy('data.' . $this->idKey); + + $table_mapping = $this->getTableMapping(); + $translations = array(); if ($this->revisionDataTable) { - // Join the revision data table. - $query->leftJoin($this->revisionDataTable, 'revision', "(data.$this->idKey = revision.$this->idKey AND data.$this->revisionKey = revision.$this->revisionKey)"); + $data_fields = array_diff($table_mapping->getFieldNames($this->revisionDataTable), $table_mapping->getFieldNames($this->baseTable)); + + // Are there any fields unique to dataTable, that are not IDs or revisionable? + $data_fields_static = array_diff($table_mapping->getFieldNames($this->dataTable), $table_mapping->getFieldNames($this->revisionDataTable), $table_mapping->getFieldNames($this->baseTable)); + if ($data_fields_static) { + $data_fields = array_merge($data_fields, $data_fields_static); + + $query->leftJoin($this->dataTable, 'static', "(data.$this->revisionKey = static.$this->revisionKey)"); + $query->fields('static', $data_fields_static); + } // Get the revision IDs. $revision_ids = array(); foreach ($entities as $values) { $revision_ids[] = is_object($values) ? $values->getRevisionId() : $values[$this->revisionKey][LanguageInterface::LANGCODE_DEFAULT]; } - $query->condition("data.$this->revisionKey", $revision_ids); + $query->condition('data.' . $this->revisionKey, $revision_ids); } - - $data = $query->execute(); - - $table_mapping = $this->getTableMapping(); - $data_fields = $table_mapping->getFieldNames($this->dataTable); - $translations = array(); - if ($this->revisionDataTable) { - $data_fields = array_unique(array_merge($data_fields, $table_mapping->getFieldNames($this->revisionDataTable))); + else { + $data_fields = $table_mapping->getFieldNames($this->dataTable); } + $data = $query->execute(); foreach ($data as $values) { $id = $values[$this->idKey];