/** * @param QueryBuilder $qb * @param EntityColumn $column */ private function joinColumn(QueryBuilder $qb, EntityColumn $column) { $joins = []; $pos = strpos($column->getField(), '.'); if (false !== $pos) { $fields = $column->getField(); $prefix = ''; while (false !== $pos) { $join = [empty($prefix) ? $this->table->getPrefix() : $prefix]; $field = substr($fields, 0, $pos); $prefix .= (empty($prefix) ? '' : '_') . EntityColumn::createEntityPrefix($field); array_push($join, $field, $prefix); $joins[join('.', $join)] = $join; $fields = substr($fields, $pos + 1); $pos = strpos($fields, '.'); if (false === $pos && 0 < strlen($fields)) { $pos = strlen($fields); } } } else { $join = [$this->table->getPrefix(), $column->getField(), $column->getEntityPrefix()]; $joins[join('.', $join)] = $join; } foreach ($joins as $key => $join) { if (!isset($this->joins[$key])) { $qb->leftJoin($join[0] . '.' . $join[1], $join[2]); $this->joins[$key] = $join; } } }