protected static function getRefRelatedBySuffix(ForeignKey $fk) { $relCol = ''; foreach ($fk->getMapping() as $mapping) { list($localColumn, $foreignValueOrColumn) = $mapping; $localColumnName = $localColumn->getPhpName(); $localTable = $fk->getTable(); if (!$localColumn) { throw new RuntimeException(sprintf('Could not fetch column: %s in table %s.', $localColumnName, $localTable->getName())); } $foreignKeysToForeignTable = $localTable->getForeignKeysReferencingTable($fk->getForeignTableName()); if ($foreignValueOrColumn instanceof Column && $fk->getForeignTableName() == $fk->getTableName()) { $foreignColumnName = $foreignValueOrColumn->getPhpName(); // self referential foreign key $relCol .= $foreignColumnName; if (count($foreignKeysToForeignTable) > 1) { // several self-referential foreign keys $relCol .= array_search($fk, $foreignKeysToForeignTable); } } elseif (count($foreignKeysToForeignTable) > 1 || count($fk->getForeignTable()->getForeignKeysReferencingTable($fk->getTableName())) > 0) { // several foreign keys to the same table, or symmetrical foreign key in foreign table $relCol .= $localColumn->getPhpName(); } } if (!empty($relCol)) { $relCol = 'RelatedBy' . $relCol; } return $relCol; }