You are here

public function EntityField::query in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/views/src/Plugin/views/field/EntityField.php \Drupal\views\Plugin\views\field\EntityField::query()

Called to add the field to a query.

By default, all needed data is taken from entities loaded by the query plugin. Columns are added only if they are used in groupings.

Overrides FieldPluginBase::query

File

core/modules/views/src/Plugin/views/field/EntityField.php, line 253

Class

EntityField
A field that displays entity field data.

Namespace

Drupal\views\Plugin\views\field

Code

public function query($use_groupby = FALSE) {
  $fields = $this->additional_fields;

  // No need to add the entity type.
  $entity_type_key = array_search('entity_type', $fields);
  if ($entity_type_key !== FALSE) {
    unset($fields[$entity_type_key]);
  }
  if ($use_groupby) {

    // Add the fields that we're actually grouping on.
    $options = [];
    if ($this->options['group_column'] != 'entity_id') {
      $options = [
        $this->options['group_column'] => $this->options['group_column'],
      ];
    }
    $options += is_array($this->options['group_columns']) ? $this->options['group_columns'] : [];

    // Go through the list and determine the actual column name from field api.
    $fields = [];
    $table_mapping = $this
      ->getTableMapping();
    $field_definition = $this
      ->getFieldStorageDefinition();
    foreach ($options as $column) {
      $fields[$column] = $table_mapping
        ->getFieldColumnName($field_definition, $column);
    }
    $this->group_fields = $fields;
  }

  // Add additional fields (and the table join itself) if needed.
  if ($this
    ->add_field_table($use_groupby)) {
    $this
      ->ensureMyTable();
    $this
      ->addAdditionalFields($fields);
  }

  // Let the entity field renderer alter the query if needed.
  $this
    ->getEntityFieldRenderer()
    ->query($this->query, $this->relationship);
}