/** * {@inheritdoc} */ public function query() { // The table doesn't exist until a moderated node has been saved at least // once. Just in case, disable this filter until then. Note that this means // the view will still show all revisions, not just latest, but this is // sufficiently edge-case-y that it's probably not worth the time to // handle more robustly. if (!$this->connection->schema()->tableExists('content_revision_tracker')) { return; } $table = $this->ensureMyTable(); /** @var \Drupal\views\Plugin\views\query\Sql $query */ $query = $this->query; $definition = $this->entityTypeManager->getDefinition($this->getEntityType()); $keys = $definition->getKeys(); $definition = ['table' => 'content_revision_tracker', 'type' => 'INNER', 'field' => 'entity_id', 'left_table' => $table, 'left_field' => $keys['id'], 'extra' => [['left_field' => $keys['langcode'], 'field' => 'langcode'], ['left_field' => $keys['revision'], 'field' => 'revision_id'], ['field' => 'entity_type', 'value' => $this->getEntityType()]]]; $join = $this->joinHandler->createInstance('standard', $definition); $query->ensureTable('content_revision_tracker', $this->relationship, $join); }