getTable(); $className = $table->getPhpName(); $countFK = count($table->getForeignKeys()); if ($countFK >= 1) { foreach ($table->getForeignKeys() as $fk) { $joinTable = $table->getDatabase()->getTable($fk->getForeignTableName()); if (!$joinTable->isForReferenceOnly()) { // FIXME - look into removing this next condition; it may not // be necessary: // --- IT is necessary because there needs to be a system for // aliasing the table if it is the same table. if ( $fk->getForeignTableName() != $table->getName() ) { $joinClassName = $joinTable->getPhpName(); $thisTableObjectBuilder = OMBuilder::getNewObjectBuilder($table); $joinedTableObjectBuilder = OMBuilder::getNewObjectBuilder($joinTable); $joinedTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable); $script .= " /** * Selects a collection of $className objects pre-filled with their $joinClassName objects. * * @return array Array of $className objects. * @throws PropelException Any exceptions caught during processing will be * rethrown wrapped into a PropelException. */ public static function doSelectJoin".$thisTableObjectBuilder->getFKPhpNameAffix($fk, $plural = false)."(Criteria \$c, \$con = null) { \$c = clone \$c; // Set the correct dbName if it has not been overridden if (\$c->getDbName() == Propel::getDefaultDB()) { \$c->setDbName(self::DATABASE_NAME); } ".$this->getPeerClassname()."::addSelectColumns(\$c); \$startcol = (".$this->getPeerClassname()."::NUM_COLUMNS - ".$this->getPeerClassname()."::NUM_LAZY_LOAD_COLUMNS) + 1; ".$joinedTablePeerBuilder->getPeerClassname()."::addSelectColumns(\$c); "; $lfMap = $fk->getLocalForeignMapping(); foreach ($fk->getLocalColumns() as $columnName ) { $column = $table->getColumn($columnName); $columnFk = $joinTable->getColumn( $lfMap[$columnName] ); $script .= " \$c->addJoin(".$this->getColumnConstant($column).", ".$joinedTablePeerBuilder->getColumnConstant($columnFk).");"; //CHECKME } if ($joinTable->getChildrenColumn()) { $script .= " \$clsjoin = Propel::import(".$joinedTablePeerBuilder->getPeerClassname()."::getOMClass(\$rs, \$startcol)); "; } else { $script .= " \$clsjoin = Propel::import(".$joinedTablePeerBuilder->getPeerClassname()."::getOMClass()); "; } if ($table->getChildrenColumn()) { $script .= " \$cls = Propel::import(".$this->getPeerClassname()."::getOMClass(\$rs, 1)); "; } else { $script .= " \$cls = Propel::import(".$this->getPeerClassname()."::getOMClass()); "; } $script .= " \$rs = ".$this->basePeerClassname."::doSelect(\$c, \$con); \$results = array(); \$map = array(); while(\$rs->next()) { "; $script .= " \$obj1 = new \$cls(); \$obj1->hydrate(\$rs); "; $script .= " \$obj2 = new \$clsjoin(); \$obj2->hydrate(\$rs, \$startcol); self::foreignMap(\$map, \$obj1, \$obj2); \$results[] = \$obj1; } return \$results; } "; } // if fk table name != this table name } // if ! is reference only } // foreach column } // if count(fk) > 1 } // addDoSelectJoin() /** * Adds the doSelectJoinAll() method. * @param string &$script The script will be modified in this method. */ protected function addDoSelectJoinAll(&$script) { $table = $this->getTable(); $className = $table->getPhpName(); // $joinedTableObjectBuilder->getRefFKPhpNameAffix($fk, $plural = true)."(); // $joinedTableObjectBuilder->getRefFKPhpNameAffix($fk, $plural = false)."(\$obj1); $thisTableObjectBuilder = OMBuilder::getNewObjectBuilder($table); $script .= " /** * hash table function! **/ static protected function foreignMap(array &\$map, \$obj1, \$hashObj) { if (isset(\$map[\$hashObj->getPrimaryKey()])) { \$map[\$hashObj->getPrimaryKey()]->add$className(\$obj1); } else { \$hashObj->init{$className}s(); \$hashObj->add$className(\$obj1); \$map[\$hashObj->getPrimaryKey()] = \$hashObj; } } /** * Selects a collection of $className objects pre-filled with all related objects. * * @return array Array of $className objects. * @throws PropelException Any exceptions caught during processing will be * rethrown wrapped into a PropelException. */ public static function doSelectJoinAll(Criteria \$c, \$con = null) { \$c = clone \$c; // Set the correct dbName if it has not been overridden if (\$c->getDbName() == Propel::getDefaultDB()) { \$c->setDbName(self::DATABASE_NAME); } ".$this->getPeerClassname()."::addSelectColumns(\$c); \$startcol2 = (".$this->getPeerClassname()."::NUM_COLUMNS - ".$this->getPeerClassname()."::NUM_LAZY_LOAD_COLUMNS) + 1; "; $index = 2; foreach ($table->getForeignKeys() as $fk) { // want to cover this case, but the code is not there yet. // FIXME: why "is the code not there yet" ? if ( $fk->getForeignTableName() != $table->getName() ) { $joinTable = $table->getDatabase()->getTable($fk->getForeignTableName()); $joinClassName = $joinTable->getPhpName(); $new_index = $index + 1; $joinedTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable); $script .= " ".$joinedTablePeerBuilder->getPeerClassname()."::addSelectColumns(\$c); \$startcol$new_index = \$startcol$index + ".$joinedTablePeerBuilder->getPeerClassname()."::NUM_COLUMNS; "; $index = $new_index; } // if fk->getForeignTableName != table->getName } // foreach [sub] foreign keys foreach ($table->getForeignKeys() as $fk) { // want to cover this case, but the code is not there yet. if ( $fk->getForeignTableName() != $table->getName() ) { $joinTable = $table->getDatabase()->getTable($fk->getForeignTableName()); $joinedTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable); $joinClassName = $joinTable->getPhpName(); $lfMap = $fk->getLocalForeignMapping(); foreach ($fk->getLocalColumns() as $columnName ) { $column = $table->getColumn($columnName); $columnFk = $joinTable->getColumn( $lfMap[$columnName]); $script .= " \$c->addJoin(".$this->getColumnConstant($column).", ".$joinedTablePeerBuilder->getColumnConstant($columnFk)."); "; } } } $index = 1; foreach ($table->getForeignKeys() as $fk ) { // want to cover this case, but the code is not there yet. // FIXME -- why not? -because we'd have to alias the tables in the JOIN if ( $fk->getForeignTableName() != $table->getName() ) { $joinTable = $table->getDatabase()->getTable($fk->getForeignTableName()); $joinClassName = $joinTable->getPhpName(); $interfaceName = $joinTable->getPhpName(); if($joinTable->getInterface()) { $interfaceName = $joinTable->getInterface(); } $thisTableObjectBuilder = OMBuilder::getNewObjectBuilder($table); $joinedTableObjectBuilder = OMBuilder::getNewObjectBuilder($joinTable); $joinedTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable); $cname = $joinedTablePeerBuilder->getPeerClassname(); $joinedPeerClassName = $joinedTablePeerBuilder->getPeerClassname(); $index++; $script .= " \$om$joinedPeerClassName = Propel::import(".$joinedTablePeerBuilder->getPeerClassname()."::getOMClass(\$rs, \$startcol$index)); \$map$joinedPeerClassName = array(); "; } } if ($table->getChildrenColumn()) { $script .= " \$omClass = ".$this->getPeerClassname()."::getOMClass(\$rs, 1); "; } else { $script .= " \$omClass = ".$this->getPeerClassname()."::getOMClass(); "; } $script .= " \$cls = Propel::import(\$omClass); \$rs = ".$this->basePeerClassname."::doSelect(\$c, \$con); \$results = array(); while(\$rs->next()) { "; $script .= " \$obj1 = new \$cls(); \$obj1->hydrate(\$rs); "; $index = 1; foreach ($table->getForeignKeys() as $fk ) { // want to cover this case, but the code is not there yet. // FIXME -- why not? -because we'd have to alias the tables in the JOIN if ( $fk->getForeignTableName() != $table->getName() ) { $joinTable = $table->getDatabase()->getTable($fk->getForeignTableName()); $joinClassName = $joinTable->getPhpName(); $interfaceName = $joinTable->getPhpName(); if($joinTable->getInterface()) { $interfaceName = $joinTable->getInterface(); } $thisTableObjectBuilder = OMBuilder::getNewObjectBuilder($table); $joinedTableObjectBuilder = OMBuilder::getNewObjectBuilder($joinTable); $joinedTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable); $joinedPeerClassName = $joinedTablePeerBuilder->getPeerClassname(); $index++; $script .= " // Add objects for joined $joinClassName rows \$obj".$index." = new \$om$joinedPeerClassName(); \$obj".$index."->hydrate(\$rs, \$startcol$index); self::foreignMap(\$map$joinedPeerClassName, \$obj1, \$obj".$index."); "; } // $fk->getForeignTableName() != $table->getName() } //foreach foreign key $script .= " \$results[] = \$obj1; } return \$results; } "; } // end addDoSelectJoinAll() /** * Adds the doSelectJoinAllExcept*() methods. * @param string &$script The script will be modified in this method. */ protected function addDoSelectJoinAllExcept(&$script) { $table = $this->getTable(); // ------------------------------------------------------------------------ // doSelectJoinAllExcept*() // ------------------------------------------------------------------------ // 2) create a bunch of doSelectJoinAllExcept*() methods // -- these were existing in original Torque, so we should keep them for compatibility $fkeys = $table->getForeignKeys(); // this sep assignment is necessary otherwise sub-loops over // getForeignKeys() will cause this to only execute one time. foreach ($fkeys as $fk ) { $tblFK = $table->getDatabase()->getTable($fk->getForeignTableName()); $excludedTable = $table->getDatabase()->getTable($fk->getForeignTableName()); $excludedClassName = $excludedTable->getPhpName(); $thisTableObjectBuilder = OMBuilder::getNewObjectBuilder($table); $excludedTableObjectBuilder = OMBuilder::getNewObjectBuilder($excludedTable); $excludedTablePeerBuilder = OMBuilder::getNewPeerBuilder($excludedTable); $script .= " /** * Selects a collection of ".$table->getPhpName()." objects pre-filled with all related objects except ".$thisTableObjectBuilder->getFKPhpNameAffix($fk).". * * @return array Array of ".$table->getPhpName()." objects. * @throws PropelException Any exceptions caught during processing will be * rethrown wrapped into a PropelException. */ public static function doSelectJoinAllExcept".$thisTableObjectBuilder->getFKPhpNameAffix($fk, $plural = false)."(Criteria \$c, \$con = null) { \$c = clone \$c; // Set the correct dbName if it has not been overridden // \$c->getDbName() will return the same object if not set to another value // so == check is okay and faster if (\$c->getDbName() == Propel::getDefaultDB()) { \$c->setDbName(self::DATABASE_NAME); } ".$this->getPeerClassname()."::addSelectColumns(\$c); \$startcol2 = (".$this->getPeerClassname()."::NUM_COLUMNS - ".$this->getPeerClassname()."::NUM_LAZY_LOAD_COLUMNS) + 1; "; $index = 2; foreach ($table->getForeignKeys() as $subfk) { // want to cover this case, but the code is not there yet. // FIXME - why not? if ( !($subfk->getForeignTableName() == $table->getName())) { $joinTable = $table->getDatabase()->getTable($subfk->getForeignTableName()); $joinClassName = $joinTable->getPhpName(); $joinTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable); if ($joinClassName != $excludedClassName) { $new_index = $index + 1; $script .= " ".$joinTablePeerBuilder->getPeerClassname()."::addSelectColumns(\$c); \$startcol$new_index = \$startcol$index + ".$joinTablePeerBuilder->getPeerClassname()."::NUM_COLUMNS; "; $index = $new_index; } // if joinClassName not excludeClassName } // if subfk is not curr table } // foreach [sub] foreign keys foreach ($table->getForeignKeys() as $subfk) { // want to cover this case, but the code is not there yet. if ( $subfk->getForeignTableName() != $table->getName() ) { $joinTable = $table->getDatabase()->getTable($subfk->getForeignTableName()); $joinClassName = $joinTable->getPhpName(); $joinTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable); if($joinClassName != $excludedClassName) { $lfMap = $subfk->getLocalForeignMapping(); foreach ($subfk->getLocalColumns() as $columnName ) { $column = $table->getColumn($columnName); $columnFk = $joinTable->getColumn( $lfMap[$columnName]); $script .= " \$c->addJoin(".$this->getColumnConstant($column).", ".$joinTablePeerBuilder->getColumnConstant($columnFk)."); "; if ($joinTable->getChildrenColumn()) { $script .= " \$om$joinClassName = Propel::import(".$joinTablePeerBuilder->getPeerClassname()."::getOMClass(\$rs, \$startcol$index));"; } else { $script .= " \$om$joinClassName = Propel::import(".$joinTablePeerBuilder->getPeerClassname()."::getOMClass());"; } $script .= " \$map$joinClassName = array(); "; } } } } // foreach fkeys if ($table->getChildrenColumn()) { $script .= " \$cls = Propel::import(".$this->getPeerClassname()."::getOMClass(\$rs, 1)); "; } else { $script .= " \$cls = Propel::import(".$this->getPeerClassname()."::getOMClass()); "; $script .= " \$rs = ".$this->basePeerClassname ."::doSelect(\$c, \$con); \$results = array(); while(\$rs->next()) { "; } $script .= " \$obj1 = new \$cls(); \$obj1->hydrate(\$rs); "; $index = 1; foreach ($table->getForeignKeys() as $subfk ) { // want to cover this case, but the code is not there yet. if ( $subfk->getForeignTableName() != $table->getName() ) { $joinTable = $table->getDatabase()->getTable($subfk->getForeignTableName()); $joinClassName = $joinTable->getPhpName(); $interfaceName = $joinTable->getPhpName(); if($joinTable->getInterface()) { $interfaceName = $joinTable->getInterface(); } if ($joinClassName != $excludedClassName) { $joinedTableObjectBuilder = OMBuilder::getNewObjectBuilder($joinTable); $joinedTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable); $index++; $script .= " \$obj$index = new \$om$joinClassName(); \$obj".$index."->hydrate(\$rs, \$startcol$index); self::foreignMap(\$map".$joinClassName.", \$obj1, \$obj".$index."); "; } // if ($joinClassName != $excludedClassName) { } // $subfk->getForeignTableName() != $table->getName() } // foreach $script .= " \$results[] = \$obj1; } return \$results; } "; } // foreach fk } // addDoSelectJoinAllExcept } // PHP5ComplexPeerBuilder