protected function parseJoinConditions(&$joins, $joinConditions)
{
$tableJoins = $leftJoinDependency = $finalJoinConditions = [];
foreach ($joinConditions as $tableChain => &$joinCondition) {
$fooQuery = $tableChain . '.foo';
$requiredJoins = [];
$this->parseJoins($requiredJoins, $fooQuery);
$tableAlias = substr($fooQuery, 0, -4);
$tableJoins[$tableAlias] = $requiredJoins;
$leftJoinDependency[$tableAlias] = [];
$finalJoinConditions[$tableAlias] = preg_replace_callback($this->getColumnChainsRegxp(), function ($match) use($tableAlias, &$tableJoins, &$leftJoinDependency) {
$requiredJoins = [];
$query = $this->parseJoinsCb($requiredJoins, $match);
$queryParts = explode('.', $query);
$tableJoins[$queryParts[0]] = $requiredJoins;
if ($queryParts[0] !== $tableAlias) {
foreach (array_keys($requiredJoins) as $requiredTable) {
$leftJoinDependency[$tableAlias][$requiredTable] = $requiredTable;
}
}
return $query;
}, $joinCondition);
}
$this->parameters['joinConditionSorted'] = [];
if (count($joinConditions)) {
while (reset($tableJoins)) {
$this->getSortedJoins(key($tableJoins), $leftJoinDependency, $tableJoins, $joins);
}
}
return $finalJoinConditions;
}