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;
 }