join语句，可多次调用产生多个join，格式为['表名:连接方式(可选)'=>'连接条件']如['table:left outter'=>'table.id=id']
@param  array|string   $condition    条件单元或者表名
@param  string         $expression   连接条件表达式
@return objetc                       $this
8536
public function join($condition, string $expression = null): object
    {
        if (!is_array($condition)) {
            $condition = [$condition => $expression];
        }
        $this->container[$this->id]['s']['join'] = array_merge($this->container[$this->id]['s']['join'], $condition);
        return $this;
    }
683639
private function _prepareJoinCondition(array $condition)
	{
		if(count($condition) === 1)
		{
			return $this->condition = '(' . $condition[0]->getColumnName() . ')';
		}

		return $this->condition =
			$condition[0]->getTableName() . '.' . $condition[0]->getColumnName() . ' = ' . $condition[1]->getTableName()
			. '.' . $condition[1]->getColumnName();
	}
121628
public function leftJoin(string $table, $criteria = null, string $alias = null): self
    {
        $table = $this->getTableNameByClassName($table);
        $this->join($table, $criteria, self::LEFT_JOIN, $alias);

        return $this;
    }
505672
public function addSelectExpression(string ...$expression) : self
    {
        $this->selectExpressions = array_merge($this->selectExpressions, $expression);

        return $this;
    }
687632
public function addOperator($expression) {
        /**
         * SELECT DISTINCT subject FROM statements WHERE
         */
        $this->query .= '(' .
                $this->getDriverEscaper()->dbCommand('SELECT') . ' ' .
                $this->getDriverEscaper()->dbCommand('DISTINCT') . ' ' .
                $this->getDriverEscaper()->reserved('subject') . ' ' .
                $this->getDriverEscaper()->dbCommand('FROM') . ' ' .
                $this->getDriverEscaper()->reserved($this->options['table']) . ' ' .
                $this->getDriverEscaper()->dbCommand('WHERE') .
                $this->operationSeparator .
                $this->userLanguage . ' ' . $expression;

        if (!empty($this->model)) {
            $this->query .=  $this->getDriverEscaper()->dbCommand('AND') . ' '.
                $this->getDriverEscaper()->reserved('modelid') . ' '.
                $this->getDriverEscaper()->dbCommand('IN') . ' '.
                '(' . implode(',', $this->model->getReadableModels()) . ')'.
                $this->operationSeparator ;
        }
        $this->query .= ' )'.')';

        $this->predicateLoop ++;

        return $this;
    }
281968
public function addOr($expression)
    {
        $this->query['$or'][] = $expression instanceof Expr ? $expression->getQuery() : $expression;
        return $this;
    }
615078
public function where($condition) {
        if (is_array($condition)) {
            $this->condition = new ArrayCondition($condition);
        } elseif ($condition instanceof ConditionInterface) {
            $this->condition = $condition;
        } else {
            throw new InvalidSQLConditionException('无效的SQL条件');
        }

        $this->condition->setStatementContext($this->statementContext);

        return $this;
    }
1335438
protected function addJoinExpression($expression, string $separator = 'AND')
    {
        if ($expression instanceof Closure) {
            $expression = Expression::fromClosure($expression);
        }

        $this->conditions[] = [
            'type' => 'joinExpression',
            'expression' => $expression,
            'separator' => $separator,
        ];

        return $this;
    }
90674
function join($relation, $expr = null, $mode = Join::INNER)
    {
        if (null !== $expr) {
            $expr = new On(new AndX(array($expr)));
        }

        $join = new Join($relation, $expr);
        $join->mode = $mode;

        $this->nodes->source->right[] = $join;
        return $this;
    }
576433
final public function join($table,$column,$operator=null,$value=null, $scape_quote=false) {
      $this->clauseJoin($table,$column,$operator,$value,$scape_quote,"");
      return $this;
   }
425234
public function whereRaw(string $condition): self
    {
        $this->condition->where([new RawExp($condition)]);

        return $this;
    }
988346
public function match($expression)
    {
        if (is_callable($expression)) {
            $expressionConfigurator = $expression;
            $expression = new Expression();
            call_user_func($expressionConfigurator, $expression);
        }

        if ($expression instanceof Expression) {
            $expression = $expression->toArray();
        } elseif (!is_array($expression)) {
            throw new Exception('Must be array, callable or instance of \Sokil\Mongo\Expression');
        }

        $this->addStage('$match', $expression);
        return $this;
    }
179370
public function where(string ...$condition) : self
    {
        // We want to wipe out anything already in the condition list
        $this->whereConditions = [];
        $this->whereConditions = $this->addConditionToClause(
            $this->whereConditions, 'AND', ...$condition);

        return $this;
    }
1295774
public function join($type, $table, $condition, $arguments = array())
    {
        $this->join[] = [
            'type' => $type,
            'table' => $table,
            'condition' => $condition,
            'arguments' => $arguments,
        ];
        return $this;
    }
54966
private function join(string $table, $criteria = null, string $type = self::INNER_JOIN, string $alias = null): self
    {
        // 是否存在判断...

        if (\is_string($criteria)) {
            $criteria = [$criteria];
        }

        $this->join[] = [
            'table'    => $table,
            'criteria' => $criteria,
            'type'     => $type,
            'alias'    => $alias,
        ];

        return $this;
    }
361676
public function addReturning(string ...$expression) : self
    {
        $this->returningExpressions = array_merge($this->returningExpressions, $expression);

        return $this;
    }
785431
public function join($join, $condition = null, $type = 'LEFT') {
        $this->joins[] = ['join' => $join,
                          'condition' => $condition,
                          'type' => $type];
        return $this;
    }