diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php index d3ed49f..4f32e3c 100644 --- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php +++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php @@ -537,6 +537,8 @@ protected function loadFromSharedTables(array &$values, array &$translations) { $fields = $table_mapping->getFieldNames($this->dataTable); } + $storage_definitions = $this->entityManager->getFieldStorageDefinitions($this->entityTypeId); + $result = $query->execute(); foreach ($result as $row) { $id = $row[$this->idKey]; @@ -548,14 +550,19 @@ protected function loadFromSharedTables(array &$values, array &$translations) { $translations[$id][$langcode] = TRUE; foreach ($fields as $field_name) { + $storage_definition = $storage_definitions[$field_name]; + $definition_columns = $storage_definition->getColumns(); $columns = $table_mapping->getColumnNames($field_name); // Do not key single-column fields by property name. if (count($columns) == 1) { - $values[$id][$field_name][$langcode] = $row[reset($columns)]; + $column_name = reset($columns); + $column_attributes = $definition_columns[key($columns)]; + $values[$id][$field_name][$langcode] = (!empty($column_attributes['serialize'])) ? unserialize($row[$column_name]) : $row[$column_name]; } else { foreach ($columns as $property_name => $column_name) { - $values[$id][$field_name][$langcode][$property_name] = $row[$column_name]; + $column_attributes = $definition_columns[$property_name]; + $values[$id][$field_name][$langcode][$property_name] = (!empty($column_attributes['serialize'])) ? unserialize($row[$column_name]) : $row[$column_name]; } } }