getColumns() as $column) { if ($column->isPrimaryKey()) { return $column; } } return null; } public static function getRelatedColumn($class, $middleClass, $columnName = '') { // find the related class $tableMap = call_user_func(array($middleClass.'Peer', 'getTableMap')); $object_table_name = constant($class.'Peer::TABLE_NAME'); foreach ($tableMap->getColumns() as $column) { if ($middleClass == 'ProductHasAccessories') { // print "
"; // print_r ($column->isForeignKey() . ':' . $object_table_name . '!=' . $column->getRelatedTableName() . ':' . $column->getColumnName() .'=='. strtoupper($columnName)); // print ""; } if ($column->isForeignKey() && ($object_table_name != $column->getRelatedTableName() || $column->getColumnName() == strtoupper($columnName))) { return $column; } } // if ($middleClass == 'ProductHasAccessories') // { // die(); // } } public static function getColumn($class, $middleClass, $columnName = '') { // find the related class $tableMap = call_user_func(array($middleClass.'Peer', 'getTableMap')); $object_table_name = constant($class.'Peer::TABLE_NAME'); foreach ($tableMap->getColumns() as $column) { if ($column->isForeignKey() && $object_table_name == $column->getRelatedTableName() && $column->getColumnName() != strtoupper($columnName)) { return $column; } } } public static function getRelatedClass($class, $middleClass, $columnName = '') { $column = self::getRelatedColumn($class, $middleClass, $columnName); // we must load all map builder classes $classes = sfFinder::type('file')->ignore_version_control()->name('*MapBuilder.php')->in(sfLoader::getModelDirs()); foreach ($classes as $class) { $class_map_builder = basename($class, '.php'); $map = new $class_map_builder(); $map->doBuild(); } $tableMap = call_user_func(array($middleClass.'Peer', 'getTableMap')); return $tableMap->getDatabaseMap()->getTable($column->getRelatedTableName())->getPhpName(); } }