function LatestTranslationAffectedRevision::query

Add this filter to the query.

Due to the nature of fapi, the value and the operator have an unintended level of indirection. You will find them in $this->operator and $this->value respectively.

Overrides FilterPluginBase::query

File

core/modules/views/src/Plugin/views/filter/LatestTranslationAffectedRevision.php, line 88

Class

LatestTranslationAffectedRevision
Filter to show only the latest translation affected revision of an entity.

Namespace

Drupal\views\Plugin\views\filter

Code

public function query() {
  /** @var \Drupal\views\Plugin\views\query\Sql $query */
  $query = $this->query;
  $query_base_table = $this->relationship ?: $this->view->storage
    ->get('base_table');
  $entity_type = $this->entityTypeManager
    ->getDefinition($this->getEntityType());
  $keys = $entity_type->getKeys();
  $subquery = $query->getConnection()
    ->select($query_base_table, 'base_table');
  $subquery->addExpression("MAX(base_table.{$keys['revision']})", $keys['revision']);
  $subquery->fields('base_table', [
    $keys['id'],
    'langcode',
  ]);
  $subquery->groupBy("base_table.{$keys['id']}");
  $subquery->groupBy('base_table.langcode');
  $subquery->condition('base_table.revision_translation_affected', '1');
  $definition = [
    'table formula' => $subquery,
    'type' => 'INNER',
    'field' => $keys['id'],
    'left_table' => $query_base_table,
    'left_field' => $keys['id'],
    'extra' => [
      [
        'left_field' => $keys['revision'],
        'field' => $keys['revision'],
        'operator' => '=',
      ],
      [
        'left_field' => 'langcode',
        'field' => 'langcode',
        'operator' => '=',
      ],
    ],
  ];
  $join = $this->joinHandler
    ->createInstance('standard', $definition);
  $query->addTable($query_base_table, $this->relationship, $join);
  $query->addWhere($this->options['group'], "{$query_base_table}.revision_translation_affected", '1', '=');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.