private static function _queuetoLeftJoins($pModel, $pAlias, $pQueue, $pTableNameUsed = array()) { $lLeftModel = $pModel; $lLeftTable = $pModel->getSqlTableUnit(); $lLeftAliasTable = self::_getAlias($lLeftTable->getValue("name"), $pTableNameUsed); $lLeftJoins = array(array('left_model' => $pModel, 'right_model' => $pModel, 'right_table' => $lLeftTable->getValue("name"), 'right_table_alias' => $lLeftAliasTable, 'right_column' => $pModel->getSerializationIds())); $lCurrentNode = $pQueue; while (!is_null($lCurrentNode)) { if (!is_object($lCurrentNode) || !isset($lCurrentNode->property)) { throw new \Exception("malformed phpObject literal : " . json_encode($pPhpObject)); } $lLeftTableName = is_null($lLeftAliasTable) ? $lLeftTable->getValue("name") : $lLeftAliasTable; $lProperty = $lLeftModel->getProperty($lCurrentNode->property, true); $lLeftJoin = ComplexLoadRequest::prepareLeftJoin($lLeftTable, $lLeftModel, $lProperty); $lLeftJoin["left_table"] = $lLeftTableName; $lLeftJoin["right_table_alias"] = self::_getAlias($lLeftJoin["right_table"], $pTableNameUsed); $lLeftJoins[] = $lLeftJoin; $lLeftModel = $lProperty->getUniqueModel(); $lLeftTable = $lProperty->getSqlTableUnit(); $lLeftAliasTable = $lLeftJoin["right_table_alias"]; $lCurrentNode = isset($lCurrentNode->child) ? $lCurrentNode->child : null; } // if first left join has only one join column, first table is redundant so we can remove it. if (count($lLeftJoins[1]['right_column']) == 1) { array_shift($lLeftJoins); } return $lLeftJoins; }