本文整理汇总了PHP中OMBuilder::getNewPeerBuilder方法的典型用法代码示例。如果您正苦于以下问题:PHP OMBuilder::getNewPeerBuilder方法的具体用法?PHP OMBuilder::getNewPeerBuilder怎么用?PHP OMBuilder::getNewPeerBuilder使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OMBuilder
的用法示例。
在下文中一共展示了OMBuilder::getNewPeerBuilder方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: addDoSelectWithI18n
protected function addDoSelectWithI18n(&$script)
{
$table = $this->getTable();
$thisTableObjectBuilder = OMBuilder::getNewObjectBuilder($table);
$className = $table->getPhpName();
$pks = $table->getPrimaryKey();
$pk = PeerBuilder::getColumnName($pks[0], $className);
// get i18n table name and culture column name
foreach ($table->getReferrers() as $fk) {
$tblFK = $fk->getTable();
if ($tblFK->getName() == $table->getAttribute('i18nTable')) {
$i18nClassName = $tblFK->getPhpName();
// FIXME
$i18nPeerClassName = $i18nClassName . 'Peer';
$i18nTable = $table->getDatabase()->getTable($tblFK->getName());
$i18nTableObjectBuilder = OMBuilder::getNewObjectBuilder($i18nTable);
$i18nTablePeerBuilder = OMBuilder::getNewPeerBuilder($i18nTable);
$i18nPks = $i18nTable->getPrimaryKey();
$i18nPk = PeerBuilder::getColumnName($i18nPks[0], $i18nClassName);
$culturePhpName = '';
$cultureColumnName = '';
foreach ($tblFK->getColumns() as $col) {
if ("true" === strtolower($col->getAttribute('isCulture'))) {
$culturePhpName = $col->getPhpName();
$cultureColumnName = PeerBuilder::getColumnName($col, $i18nClassName);
}
}
}
}
$script .= "\n\n /**\n * Selects a collection of {$className} objects pre-filled with their i18n objects.\n *\n * @return array Array of {$className} objects.\n * @throws PropelException Any exceptions caught during processing will be\n * rethrown wrapped into a PropelException.\n */\n public static function doSelectWithI18n(Criteria \$c, \$culture = null, \$con = null)\n {\n if (\$culture === null)\n {\n \$culture = sfPropel::getDefaultCulture();\n }\n";
if (DataModelBuilder::getBuildProperty('builderAddBehaviors')) {
$script .= "\n\n foreach (sfMixer::getCallables('{$this->getClassname()}:doSelectJoin:doSelectJoin') as \$callable)\n {\n call_user_func(\$callable, '{$this->getClassname()}', \$c, \$con);\n }\n\n";
}
$script .= "\n // Set the correct dbName if it has not been overridden\n if (\$c->getDbName() == Propel::getDefaultDB())\n {\n \$c->setDbName(self::DATABASE_NAME);\n }\n\n " . $this->getPeerClassname() . "::addSelectColumns(\$c);\n \$startcol = (" . $this->getPeerClassname() . "::NUM_COLUMNS - " . $this->getPeerClassname() . "::NUM_LAZY_LOAD_COLUMNS) + 1;\n\n " . $i18nPeerClassName . "::addSelectColumns(\$c);\n\n \$c->addJoin(" . $pk . ", " . $i18nPk . ");\n \$c->add(" . $cultureColumnName . ", \$culture);\n\n \$rs = " . $this->basePeerClassname . "::doSelect(\$c, \$con);\n \$results = array();\n\n while(\$rs->next()) {\n";
if ($table->getChildrenColumn()) {
$script .= "\n \$omClass = " . $this->getPeerClassname() . "::getOMClass(\$rs, 1);\n";
} else {
$script .= "\n \$omClass = " . $this->getPeerClassname() . "::getOMClass();\n";
}
$script .= "\n \$cls = Propel::import(\$omClass);\n \$obj1 = new \$cls();\n \$obj1->hydrate(\$rs);\n \$obj1->setCulture(\$culture);\n";
// if ($i18nTable->getChildrenColumn()) {
$script .= "\n \$omClass = " . $i18nTablePeerBuilder->getPeerClassname() . "::getOMClass(\$rs, \$startcol);\n";
// } else {
// $script .= "
// \$omClass = ".$i18nTablePeerBuilder->getPeerClassname()."::getOMClass();
//";
// }
$script .= "\n \$cls = Propel::import(\$omClass);\n \$obj2 = new \$cls();\n \$obj2->hydrate(\$rs, \$startcol);\n\n \$obj1->set" . $i18nClassName . "ForCulture(\$obj2, \$culture);\n \$obj2->set" . $className . "(\$obj1);\n\n \$results[] = \$obj1;\n }\n return \$results;\n }\n";
}
示例2: addDoCountJoinAllExcept
/**
* Adds the doCountJoinAllExcept*() methods.
* @param string &$script The script will be modified in this method.
*/
protected function addDoCountJoinAllExcept(&$script)
{
$table = $this->getTable();
$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 .= "\n\n\t/**\n\t * Returns the number of rows matching criteria, joining the related " . $thisTableObjectBuilder->getFKPhpNameAffix($fk, $plural = false) . " table\n\t *\n\t * @param Criteria \$c\n\t * @param boolean \$distinct Whether to select only distinct columns (You can also set DISTINCT modifier in Criteria).\n\t * @param Connection \$con\n\t * @return int Number of matching rows.\n\t */\n\tpublic static function doCountJoinAllExcept" . $thisTableObjectBuilder->getFKPhpNameAffix($fk, $plural = false) . "(Criteria \$criteria, \$distinct = false, \$con = null)\n\t{\n\t\t// we're going to modify criteria, so copy it first\n\t\t\$criteria = clone \$criteria;\n\n\t\t// clear out anything that might confuse the ORDER BY clause\n\t\t\$criteria->clearSelectColumns()->clearOrderByColumns();\n\t\tif (\$distinct || in_array(Criteria::DISTINCT, \$criteria->getSelectModifiers())) {\n\t\t\t\$criteria->addSelectColumn(" . $this->getPeerClassname() . "::COUNT_DISTINCT);\n\t\t} else {\n\t\t\t\$criteria->addSelectColumn(" . $this->getPeerClassname() . "::COUNT);\n\t\t}\n\n\t\t// just in case we're grouping: add those columns to the select statement\n\t\tforeach(\$criteria->getGroupByColumns() as \$column)\n\t\t{\n\t\t\t\$criteria->addSelectColumn(\$column);\n\t\t}\n";
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 .= "\n\t\t\$criteria->addJoin(" . $this->getColumnConstant($column) . ", " . $joinTablePeerBuilder->getColumnConstant($columnFk) . ");\n";
}
}
}
}
// foreach fkeys
$script .= "\n\t\t\$rs = " . $this->getPeerClassname() . "::doSelectRS(\$criteria, \$con);\n\t\tif (\$rs->next()) {\n\t\t\treturn \$rs->getInt(1);\n\t\t} else {\n\t\t\t// no rows returned; we infer that means 0 matches.\n\t\t\treturn 0;\n\t\t}\n\t}\n";
}
// foreach fk
}
示例3: addDoOnDeleteSetNull
/**
* Adds the doOnDeleteSetNull() method, which provides ON DELETE SET NULL emulation.
* @param string &$script The script will be modified in this method.
*/
protected function addDoOnDeleteSetNull(&$script)
{
$table = $this->getTable();
$script .= "\n /**\n * This is a method for emulating ON DELETE SET NULL DBs that don't support this\n * feature (like MySQL or SQLite).\n *\n * This method is not very speedy because it must perform a query first to get\n * the implicated records and then perform the deletes by calling those Peer classes.\n *\n * This method should be used within a transaction if possible.\n *\n * @param Criteria \$criteria\n * @param Connection \$con\n * @return void\n */\n protected static function doOnDeleteSetNull(Criteria \$criteria, Connection \$con)\n {\n\n // first find the objects that are implicated by the \$criteria\n \$objects = " . $this->getPeerClassname() . "::doSelect(\$criteria, \$con);\n foreach(\$objects as \$obj) {\n";
// This logic is almost exactly the same as that in doOnDeleteCascade()
// it may make sense to refactor this, provided that thigns don't
// get too complicated.
foreach ($table->getReferrers() as $fk) {
// $fk is the foreign key in the other table, so localTableName will
// actually be the table name of other table
$tblFK = $fk->getTable();
$refTablePeerBuilder = OMBuilder::getNewPeerBuilder($tblFK);
if (!$tblFK->isForReferenceOnly()) {
// we can't perform operations on tables that are
// not within the schema (i.e. that we have no map for, etc.)
$fkClassName = $tblFK->getPhpName();
// i'm not sure whether we can allow delete setnull for foreign keys
// within the same table? perhaps we can?
if ($fk->getOnDelete() == ForeignKey::SETNULL && $fk->getTable()->getName() != $table->getName()) {
// backwards on purpose
$columnNamesF = $fk->getLocalColumns();
$columnNamesL = $fk->getForeignColumns();
// should be same num as foreign
$script .= "\n // set fkey col in related {$fkClassName} rows to NULL\n \$selectCriteria = new Criteria(" . $this->getPeerClassname() . "::DATABASE_NAME);\n \$updateValues = new Criteria(" . $this->getPeerClassname() . "::DATABASE_NAME);";
for ($x = 0, $xlen = count($columnNamesF); $x < $xlen; $x++) {
$columnFK = $tblFK->getColumn($columnNamesF[$x]);
$columnL = $table->getColumn($columnNamesL[$x]);
$script .= "\n \$selectCriteria->add(" . $refTablePeerBuilder->getColumnConstant($columnFK) . ", \$obj->get" . $columnL->getPhpName() . "());\n \$updateValues->add(" . $refTablePeerBuilder->getColumnConstant($columnFK) . ", null);\n";
}
$script .= "\n {$this->basePeerClassname}::doUpdate(\$selectCriteria, \$updateValues, \$con); // use BasePeer because generated Peer doUpdate() methods only update using pkey\n";
}
// if setnull && fkey table name != curr table name
}
// if not for ref only
}
// foreach foreign keys
$script .= "\n }\n }\n";
}
示例4: addAttributes
/**
* Adds class attributes.
* @param string &$script The script will be modified in this method.
*/
protected function addAttributes(&$script)
{
$script .= "\n\t/**\n\t * The Peer class.\n\t * Instance provides a convenient way of calling static methods on a class\n\t * that calling code may not be able to identify.\n\t * @var " . $this->getPeerClassname() . "\n\t */\n\tprotected static \$peer;\n";
if (!$this->getTable()->isAlias()) {
$this->addColumnAttributes($script);
}
$script .= "\n\tprotected \$refCountMethods = array(\n\t\t";
foreach ($this->getTable()->getReferrers() as $refFK) {
$relCol = $this->getRefFKPhpNameAffix($refFK, $plural = true);
$fkPeerBuilder = OMBuilder::getNewPeerBuilder($refFK->getTable());
$localColumns = $refFK->getLocalColumns();
if (count($localColumns) == 1) {
$localColumns = "'" . $localColumns[0] . "'";
} else {
$localColumns = var_export($localColumns, true);
}
$script .= "array('table'=>'" . $refFK->getTable()->getName() . "', 'affix'=>'" . $relCol . "', 'peer'=>'" . $fkPeerBuilder->getPeerClassname() . "', 'column'=>{$localColumns}),\n\t\t";
}
$script .= ");\n\tpublic function getRefCountMethods() {\n\t\treturn \$this->refCountMethods;\n\t}";
}
示例5: addRefFKGet
/**
* Adds the method that returns the referrer fkey collection.
* @param string &$script The script will be modified in this method.
*/
protected function addRefFKGet(&$script, ForeignKey $refFK)
{
$table = $this->getTable();
$tblFK = $refFK->getTable();
$fkPeerBuilder = OMBuilder::getNewPeerBuilder($refFK->getTable());
$relCol = $this->getRefFKPhpNameAffix($refFK, $plural = true);
$collName = $this->getRefFKCollVarName($refFK);
$lastCriteriaName = $this->getRefFKLastCriteriaVarName($refFK);
$script .= "\n\t/**\n\t * If this collection has already been initialized with\n\t * an identical criteria, it returns the collection.\n\t * Otherwise if this " . $table->getPhpName() . " has previously\n\t * been saved, it will retrieve related {$relCol} from storage.\n\t * If this " . $table->getPhpName() . " is new, it will return\n\t * an empty collection or the current collection, the criteria\n\t * is ignored on a new object.\n\t *\n\t * @param Connection \$con\n\t * @param Criteria \$criteria\n\t * @throws PropelException\n\t */\n\tpublic function get{$relCol}(\$criteria = null, \$con = null)\n\t{\n\t\t// include the Peer class\n\t\tinclude_once '" . $fkPeerBuilder->getClassFilePath() . "';\n\t\tif (\$criteria === null) {\n\t\t\t\$criteria = new Criteria();\n\t\t}\n\t\telseif (\$criteria instanceof Criteria)\n\t\t{\n\t\t\t\$criteria = clone \$criteria;\n\t\t}\n\n\t\tif (\$this->{$collName} === null) {\n\t\t\tif (\$this->isNew()) {\n\t\t\t \$this->{$collName} = array();\n\t\t\t} else {\n";
foreach ($refFK->getLocalColumns() as $colFKName) {
// $colFKName is local to the referring table (i.e. foreign to this table)
$lfmap = $refFK->getLocalForeignMapping();
$localColumn = $this->getTable()->getColumn($lfmap[$colFKName]);
$colFK = $refFK->getTable()->getColumn($colFKName);
$script .= "\n\t\t\t\t\$criteria->add(" . $fkPeerBuilder->getColumnConstant($colFK) . ", \$this->get" . $localColumn->getPhpName() . "());\n";
}
// end foreach ($fk->getForeignColumns()
$script .= "\n\t\t\t\t" . $fkPeerBuilder->getPeerClassname() . "::addSelectColumns(\$criteria);\n\t\t\t\t\$this->{$collName} = " . $fkPeerBuilder->getPeerClassname() . "::doSelect(\$criteria, \$con);\n\t\t\t}\n\t\t} else {\n\t\t\t// criteria has no effect for a new object\n\t\t\tif (!\$this->isNew()) {\n\t\t\t\t// the following code is to determine if a new query is\n\t\t\t\t// called for. If the criteria is the same as the last\n\t\t\t\t// one, just return the collection.\n";
foreach ($refFK->getLocalColumns() as $colFKName) {
// $colFKName is local to the referring table (i.e. foreign to this table)
$lfmap = $refFK->getLocalForeignMapping();
$localColumn = $this->getTable()->getColumn($lfmap[$colFKName]);
$colFK = $refFK->getTable()->getColumn($colFKName);
$script .= "\n\n\t\t\t\t\$criteria->add(" . $fkPeerBuilder->getColumnConstant($colFK) . ", \$this->get" . $localColumn->getPhpName() . "());\n";
}
// foreach ($fk->getForeignColumns()
$script .= "\n\t\t\t\t" . $fkPeerBuilder->getPeerClassname() . "::addSelectColumns(\$criteria);\n\t\t\t\tif (!isset(\$this->{$lastCriteriaName}) || !\$this->" . $lastCriteriaName . "->equals(\$criteria)) {\n\t\t\t\t\t\$this->{$collName} = " . $fkPeerBuilder->getPeerClassname() . "::doSelect(\$criteria, \$con);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\$this->{$lastCriteriaName} = \$criteria;\n\t\treturn \$this->{$collName};\n\t}\n";
}
示例6: addDoSelectWithI18n
protected function addDoSelectWithI18n(&$script)
{
$table = $this->getTable();
$thisTableObjectBuilder = OMBuilder::getNewObjectBuilder($table);
$className = $table->getPhpName();
$pks = $table->getPrimaryKey();
$pk = PeerBuilder::getColumnName($pks[0], $className);
// get i18n table name and culture column name
foreach ($table->getReferrers() as $fk)
{
$tblFK = $fk->getTable();
if ($tblFK->getName() == $table->getAttribute('i18nTable'))
{
$i18nClassName = $tblFK->getPhpName();
// FIXME
$i18nPeerClassName = $i18nClassName.'Peer';
$i18nTable = $table->getDatabase()->getTable($tblFK->getName());
$i18nTableObjectBuilder = OMBuilder::getNewObjectBuilder($i18nTable);
$i18nTablePeerBuilder = OMBuilder::getNewPeerBuilder($i18nTable);
$i18nPks = $i18nTable->getPrimaryKey();
$i18nPk = PeerBuilder::getColumnName($i18nPks[0], $i18nClassName);
$culturePhpName = '';
$cultureColumnName = '';
foreach ($tblFK->getColumns() as $col)
{
if (('true' == trim(strtolower($col->getAttribute('isCulture')))))
{
$culturePhpName = $col->getPhpName();
$cultureColumnName = PeerBuilder::getColumnName($col, $i18nClassName);
}
}
}
}
$script .= "
/**
* Selects a collection of $className objects pre-filled with their i18n objects.
*
* @return array Array of $className objects.
* @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException.
*/
public static function doSelectWithI18n(Criteria \$c, \$culture = null, PropelPDO \$con = null)
{
// we're going to modify criteria, so copy it first
\$c = clone \$c;
if (\$culture === null)
{
\$culture = sfPropel::getDefaultCulture();
}
";
if ($this->getBuildProperty('builderAddBehaviors'))
{
$script .= "
foreach (sfMixer::getCallables('{$this->getClassname()}:doSelectJoin:doSelectJoin') as \$callable)
{
call_user_func(\$callable, '{$this->getClassname()}', \$c, \$con);
}
";
}
$script .= "
// 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);
".$i18nPeerClassName."::addSelectColumns(\$c);
\$c->addJoin(".$pk.", ".$i18nPk.");
\$c->add(".$cultureColumnName.", \$culture);
\$stmt = ".$this->basePeerClassname."::doSelect(\$c, \$con);
\$results = array();
while(\$row = \$stmt->fetch(PDO::FETCH_NUM)) {
";
if ($table->getChildrenColumn()) {
$script .= "
\$omClass = ".$this->getPeerClassname()."::getOMClass(\$row, \$startcol);
";
} else {
$script .= "
\$omClass = ".$this->getPeerClassname()."::getOMClass();
";
}
$script .= "
\$cls = Propel::importClass(\$omClass);
//.........这里部分代码省略.........