function Sql::adjustJoin

Same name in other branches
  1. 9 core/modules/views/src/Plugin/views/query/Sql.php \Drupal\views\Plugin\views\query\Sql::adjustJoin()
  2. 8.9.x core/modules/views/src/Plugin/views/query/Sql.php \Drupal\views\Plugin\views\query\Sql::adjustJoin()
  3. 10 core/modules/views/src/Plugin/views/query/Sql.php \Drupal\views\Plugin\views\query\Sql::adjustJoin()

Fixes a join to adhere to the proper relationship.

The left table can vary based upon what relationship items are joined in on.

5 calls to Sql::adjustJoin()
Sql::addRelationship in core/modules/views/src/Plugin/views/query/Sql.php
Adds a relationship to the query.
Sql::addTable in core/modules/views/src/Plugin/views/query/Sql.php
Add a table to the query, ensuring the path exists.
Sql::ensurePath in core/modules/views/src/Plugin/views/query/Sql.php
Ensures the given table can be linked to the primary table in the JOINs.
Sql::ensureTable in core/modules/views/src/Plugin/views/query/Sql.php
Ensures a table exists in the queue.
Sql::queueTable in core/modules/views/src/Plugin/views/query/Sql.php
Add a table to the query without ensuring the path.

File

core/modules/views/src/Plugin/views/query/Sql.php, line 753

Class

Sql
Views query plugin for an SQL query.

Namespace

Drupal\views\Plugin\views\query

Code

protected function adjustJoin($join, $relationship) {
    if (!empty($join->adjusted)) {
        return $join;
    }
    if (empty($relationship) || empty($this->relationships[$relationship])) {
        return $join;
    }
    // Adjusts the left table for our relationship.
    if ($relationship != $this->view->storage
        ->get('base_table')) {
        // If we're linking to the primary table, the relationship to use will
        // be the prior relationship. Unless it's a direct link.
        // Safety! Don't modify an original here.
        $join = clone $join;
        // Do we need to try to ensure a path?
        if ($join->leftTable != $this->relationships[$relationship]['table'] && $join->leftTable != $this->relationships[$relationship]['base'] && !isset($this->tables[$relationship][$join->leftTable]['alias'])) {
            $this->ensureTable($join->leftTable, $relationship);
        }
        // First, if this is our link point/anchor table, just use the relationship
        if ($join->leftTable == $this->relationships[$relationship]['table']) {
            $join->leftTable = $relationship;
        }
        elseif (isset($this->tables[$relationship][$join->leftTable]['alias'])) {
            $join->leftTable = $this->tables[$relationship][$join->leftTable]['alias'];
        }
        elseif (isset($this->tableQueue[$relationship]['alias'])) {
            $join->leftTable = $this->tableQueue[$relationship]['alias'];
        }
    }
    $join->adjusted = TRUE;
    return $join;
}

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