diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php index b913fa3..3ea9b35 100644 --- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php +++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php @@ -1600,7 +1600,9 @@ public function countFieldData($storage_definition, $as_bool = FALSE) { $or->isNotNull($table_mapping->getFieldColumnName($storage_definition, $column_name)); } $query - ->condition($or); + ->condition($or) + ->fields('t', array('entity_id')) + ->distinct(TRUE); } elseif ($table_mapping->allowsSharedTableStorage($storage_definition)) { // Ascertain the table this field is mapped too. @@ -1621,15 +1623,18 @@ public function countFieldData($storage_definition, $as_bool = FALSE) { $or->isNotNull($table_mapping->getFieldColumnName($storage_definition, $property_name)); } $query->condition($or); - } - else { - $query = $this->database->select($table_name, 't'); + $query + ->fields('t', array($this->idKey)) + ->distinct(TRUE); } // @todo Find a way to count field data also for fields having custom // storage. See https://www.drupal.org/node/2337753. - $query = $query->countQuery(); - $count = $query->execute()->fetchField(); + $count = 0; + if (isset($query)) { + $query = $query->countQuery(); + $count = $query->execute()->fetchField(); + } return $as_bool ? (bool) $count : (int) $count; }