protected function ViewsQueryAlter::ensureRevisionTable in Workspace 8.2
Adds the revision table of an entity type to a query object.
Parameters
\Drupal\Core\Entity\EntityTypeInterface $entity_type: The entity type definition.
\Drupal\views\Plugin\views\query\Sql $query: The query plugin object for the query.
string $relationship: The name of the relationship.
Return value
string The alias of the relationship.
1 call to ViewsQueryAlter::ensureRevisionTable()
- ViewsQueryAlter::alterQueryForEntityType in src/
ViewsQueryAlter.php - Alters the entity type tables for a Views query.
File
- src/
ViewsQueryAlter.php, line 319
Class
- ViewsQueryAlter
- Defines a class for altering views queries.
Namespace
Drupal\workspaceCode
protected function ensureRevisionTable(EntityTypeInterface $entity_type, Sql $query, $relationship) {
// Get the alias for the 'workspace_association' table we chain off of in
// the COALESCE.
$workspace_association_table = $this
->ensureWorkspaceAssociationTable($entity_type
->id(), $query, $relationship);
// Get the name of the revision table and revision key.
$base_revision_table = $entity_type
->isTranslatable() ? $entity_type
->getRevisionDataTable() : $entity_type
->getRevisionTable();
$revision_field = $entity_type
->getKey('revision');
// If the table was already added and has a join against the same field on
// the revision table, reuse that rather than adding a new join.
if (isset($query->tables[$relationship][$base_revision_table])) {
$table_queue =& $query
->getTableQueue();
$alias = $query->tables[$relationship][$base_revision_table]['alias'];
if (isset($table_queue[$alias]['join']->field) && $table_queue[$alias]['join']->field == $revision_field) {
// If this table previously existed, but was not added by us, we need
// to modify the join and make sure that 'workspace_association' comes
// first.
if (empty($table_queue[$alias]['join']->workspace_adjusted)) {
$table_queue[$alias]['join'] = $this
->getRevisionTableJoin($relationship, $base_revision_table, $revision_field, $workspace_association_table);
// We also have to ensure that our 'workspace_association' comes before
// this.
$this
->moveEntityTable($query, $workspace_association_table, $alias);
}
return $alias;
}
}
// Construct a new join.
$join = $this
->getRevisionTableJoin($relationship, $base_revision_table, $revision_field, $workspace_association_table);
return $query
->queueTable($base_revision_table, $relationship, $join);
}