src/ORM/Queries/SQLConditionalExpression.php
public function getJoins(&$parameters = array())
    {
        if (func_num_args() == 0) {
            Deprecation::notice(
                '4.0',
                'SQLConditionalExpression::getJoins() now may produce parameters which are necessary to
				execute this query'
            );
        }

        // Sort the joins
        $parameters = array();
        $joins = $this->getOrderedJoins($this->from);

        // Build from clauses
        foreach ($joins as $alias => $join) {
            // $join can be something like this array structure
            // array('type' => 'inner', 'table' => 'SiteTree', 'filter' => array("SiteTree.ID = 1",
            // "Status = 'approved'", 'order' => 20))
            if (!is_array($join)) {
                if (empty($alias) || is_numeric($alias)) {
                    continue;
                }

                if (preg_match('/AS\s+(?:"[^"]+"|[A-Z0-9_]+)\s*$/i', $join)) {
                    // custom aliases override the ones defined through array keys
                    // this is only meant to keep backward compatibility with SS <= 4.3,
                    // to be removed in SS5
                    continue;
                }

                $trimmedAlias = trim($alias, '"');

                if ($trimmedAlias !== trim($join, '"')) {
                    $joins[$alias] = "{$join} AS \"{$trimmedAlias}\"";
                }

                continue;
            }

            if (is_string($join['filter'])) {
                $filter = $join['filter'];
            } elseif (sizeof($join['filter']) == 1) {
                $filter = $join['filter'][0];
            } else {
                $filter = "(" . implode(") AND (", $join['filter']) . ")";
            }

            // Ensure tables are quoted, unless the table is actually a sub-select
            $table = preg_match('/\bSELECT\b/i', $join['table'])
                ? $join['table']
                : "\"{$join['table']}\"";
            $aliasClause = ($alias != $join['table'])
                ? " AS \"{$alias}\""
                : "";
            $joins[$alias] = strtoupper($join['type']) . " JOIN " . $table . "$aliasClause ON $filter";
            if (!empty($join['parameters'])) {
                $parameters = array_merge($parameters, $join['parameters']);
            }
        }

        return $joins;
    }
public function getJoins(&$parameters = array())
    {
        if (func_num_args() == 0) {
            Deprecation::notice(
                '4.0',
                'SQLConditionalExpression::getJoins() now may produce parameters which are necessary to
				execute this query'
            );
        }

        // Sort the joins
        $parameters = array();
        $joins = $this->getOrderedJoins($this->from);

        // Build from clauses
        foreach ($joins as $alias => $join) {
            // $join can be something like this array structure
            // array('type' => 'inner', 'table' => 'SiteTree', 'filter' => array("SiteTree.ID = 1",
            // "Status = 'approved'", 'order' => 20))
            if (!is_array($join)) {
                if (empty($alias) || is_numeric($alias)) {
                    continue;
                }

                if (preg_match('/AS\s+(?:"[^"]+"|[A-Z0-9_]+)\s*$/i', $join)) {
                    // custom aliases override the ones defined through array keys
                    // this is only meant to keep backward compatibility with SS <= 4.3,
                    // to be removed in SS5
                    continue;
                }

                $trimmedAlias = trim($alias, '"');

                if ($trimmedAlias !== trim($join, '"')) {
                    $joins[$alias] = "{$join} AS \"{$trimmedAlias}\"";
                }

                continue;
            }

            if (is_string($join['filter'])) {
                $filter = $join['filter'];
            } elseif (sizeof($join['filter']) == 1) {
                $filter = $join['filter'][0];
            } else {
                $filter = "(" . implode(") AND (", $join['filter']) . ")";
            }

            // Ensure tables are quoted, unless the table is actually a sub-select
            $table = preg_match('/\bSELECT\b/i', $join['table'])
                ? $join['table']
                : "\"{$join['table']}\"";
            $aliasClause = ($alias != $join['table'])
                ? " AS \"{$alias}\""
                : "";
            $joins[$alias] = strtoupper($join['type']) . " JOIN " . $table . "$aliasClause ON $filter";
            if (!empty($join['parameters'])) {
                $parameters = array_merge($parameters, $join['parameters']);
            }
        }

        return $joins;
    }
public function getJoins ( & $ parameters = array ( ) ) { if ( func_num_args ( ) == 0 ) { Deprecation :: notice ( '4.0' , 'SQLConditionalExpression::getJoins() now may produce parameters which are necessary to
				execute this query' ) ; } // Sort the joins $ parameters = array ( ) ; $ joins = $ this -> getOrderedJoins ( $ this -> from ) ; // Build from clauses foreach ( $ joins as $ alias => $ join ) { // $join can be something like this array structure // array('type' => 'inner', 'table' => 'SiteTree', 'filter' => array("SiteTree.ID = 1", // "Status = 'approved'", 'order' => 20)) if ( ! is_array ( $ join ) ) { if ( empty ( $ alias ) || is_numeric ( $ alias ) ) { continue ; } if ( preg_match ( '/AS\s+(?:"[^"]+"|[A-Z0-9_]+)\s*$/i' , $ join ) ) { // custom aliases override the ones defined through array keys // this is only meant to keep backward compatibility with SS <= 4.3, // to be removed in SS5 continue ; } $ trimmedAlias = trim ( $ alias , '"' ) ; if ( $ trimmedAlias !== trim ( $ join , '"' ) ) { $ joins [ $ alias ] = "{$join} AS \"{$trimmedAlias}\"" ; } continue ; } if ( is_string ( $ join [ 'filter' ] ) ) { $ filter = $ join [ 'filter' ] ; } elseif ( sizeof ( $ join [ 'filter' ] ) == 1 ) { $ filter = $ join [ 'filter' ] [ 0 ] ; } else { $ filter = "(" . implode ( ") AND (" , $ join [ 'filter' ] ) . ")" ; } // Ensure tables are quoted, unless the table is actually a sub-select $ table = preg_match ( '/\bSELECT\b/i' , $ join [ 'table' ] ) ? $ join [ 'table' ] : "\"{$join['table']}\"" ; $ aliasClause = ( $ alias != $ join [ 'table' ] ) ? " AS \"{$alias}\"" : "" ; $ joins [ $ alias ] = strtoupper ( $ join [ 'type' ] ) . " JOIN " . $ table . "$aliasClause ON $filter" ; if ( ! empty ( $ join [ 'parameters' ] ) ) { $ parameters = array_merge ( $ parameters , $ join [ 'parameters' ] ) ; } } return $ joins ; }
Retrieves the finalised list of joins

@todo This part of the code could be simplified

@param array $parameters Out variable for parameters required for this query
@return array List of joins as a mapping from array('Alias' => 'Join Expression')
Retrieves the finalised list of joins