diff --git a/src/ORM/DataObject.php b/src/ORM/DataObject.php index 94f726a71be..bc293979f5c 100644 --- a/src/ORM/DataObject.php +++ b/src/ORM/DataObject.php @@ -3633,7 +3633,6 @@ public function requireTable() $fields = $schema->databaseFields(static::class, false); $indexes = $schema->databaseIndexes(static::class, false); $extensions = self::database_extensions(static::class); - $legacyTables = $schema->getLegacyTableNames(static::class); if (empty($table)) { throw new LogicException( @@ -3641,26 +3640,6 @@ public function requireTable() ); } - if ($legacyTables) { - $ignore = Config::inst()->get(static::class, 'ignored_legacy_tables') ?: []; - $renameTables = array_diff( - array_intersect($legacyTables, DB::table_list()), - $ignore - ); - if (count($renameTables) > 1) { - $class = static::class; - $legacyList = implode(', ', $renameTables); - trigger_error( - "Class $class has multiple legacy tables: $legacyList", - E_USER_NOTICE - ); - } - if (count($renameTables) === 1) { - $dbSchema = DB::get_schema(); - $dbSchema->renameTable($renameTables[0], $table); - } - } - if ($fields) { $hasAutoIncPK = get_parent_class($this ?? '') === self::class; DB::require_table( diff --git a/src/ORM/DataObjectSchema.php b/src/ORM/DataObjectSchema.php index 71aaaa430d1..dcd7ca17d7a 100644 --- a/src/ORM/DataObjectSchema.php +++ b/src/ORM/DataObjectSchema.php @@ -318,30 +318,18 @@ protected function buildTableName($class) { $table = Config::inst()->get($class, 'table_name', Config::UNINHERITED); - // Return table name if configured + // Generate default table name if ($table) { return $table; } - // Use classname directly if not namespaced if (strpos($class ?? '', '\\') === false) { return $class; } - // Attempt to generate a nice table name - $separator = DataObjectSchema::config()->uninherited('table_namespace_separator') ?? ''; - $parts = explode('\\', trim($class ?? '', '\\')); - $vendor = array_slice($parts, 0, 1)[0]; - $base = array_slice($parts, -1, 1)[0]; - if ($vendor && $base && $vendor !== $base) { - $table = "{$vendor}{$separator}{$base}"; - } elseif ($base) { - $table = $base; - } else { - throw new InvalidArgumentException("Unable to build a table name for class '$class'. Define a table_name for this class."); - } + $separator = DataObjectSchema::config()->uninherited('table_namespace_separator'); + $table = str_replace('\\', $separator ?? '', trim($class ?? '', '\\')); - // Display a warning about namespaced classes producing long table names if (!ClassInfo::classImplements($class, TestOnly::class) && $this->classHasTable($class)) { DBSchemaManager::showTableNameWarning($table, $class); } @@ -349,18 +337,6 @@ protected function buildTableName($class) return $table; } - /** - * @param $class - * @return array - */ - public function getLegacyTableNames($class) - { - $separator = DataObjectSchema::config()->uninherited('table_namespace_separator'); - $names[] = str_replace('\\', $separator, trim($class, '\\')); - - return $names; - } - /** * Return the complete map of fields to specification on this object, including fixed_fields. * "ID" will be included on every table. diff --git a/tests/php/ORM/DataObjectSchemaTest.php b/tests/php/ORM/DataObjectSchemaTest.php index 455b8461abc..8c18660eb23 100644 --- a/tests/php/ORM/DataObjectSchemaTest.php +++ b/tests/php/ORM/DataObjectSchemaTest.php @@ -58,9 +58,9 @@ public function testTableName() 'DOSTWithCustomTable', $schema->tableName(WithCustomTable::class) ); - // Default table name is Vendor plus base class + // Default table name is FQN $this->assertEquals( - 'SilverStripe_DefaultTableName', + 'SilverStripe_ORM_Tests_DataObjectSchemaTest_DefaultTableName', $schema->tableName(DefaultTableName::class) ); }