есть ли способ сделать резервные столы в Doctrine 2.
У меня есть XML и хочу импортировать его каждый день с помощью задания cron. Сначала я создаю новую схему с концом _new.
if ($newTables) { $tablePastfix = new \DoctrineExtensions\TablePastfix('_new'); $evm->addEventListener(\Doctrine\ORM\Events::loadClassMetadata, $tablePastfix); } $entityManager = \Doctrine\ORM\EntityManager::create($conn, $config, $evm); if ($newTables) { $tool = new \Doctrine\ORM\Tools\SchemaTool($entityManager); $classes = array ( $entityManager->getClassMetadata('MyClasses'), $entityManager->getClassMetadata('MyClasses'), $entityManager->getClassMetadata('MyClasses'), ); $tool->createSchema($classes); }
После этого я импортирую данные из xml. И все в порядке, я переименую Таблицы
$dm = Doctrine\DBAL\DriverManager::getConnection($conn); $sql = "DROP TABLE `mytable_old`;"; $stmt = $dm->query($sql); $stmt->execute(); $dm = Doctrine\DBAL\DriverManager::getConnection($conn); $sql = "ALTER TABLE `mytable` RENAME `mytable_old`;"; $stmt = $dm->query($sql); $stmt->execute(); $dm = Doctrine\DBAL\DriverManager::getConnection($conn); $sql = "ALTER TABLE `mytable_new` RENAME `mytable`;"; $stmt = $dm->query($sql); $stmt->execute();
Но когда я хочу снова импортировать, я получаю следующую ошибку. , , , , 🙁
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1005 Can't create table 'databasename.#sql-220_87' (errno: 121)' in /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/ORM/Tools/ToolsException.php on line 33 PDOException: SQLSTATE[HY000]: General error: 1005 Can't create table 'databasename.#sql-220_87' (errno: 121) in /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/DBAL/Connection.php on line 646 Call Stack: 0.0011 761296 1. {main}() /path/to/jobs/import.php:0 0.0014 767024 2. require_once('/path/to/jobs/config.php') /path/to/jobs/import.php:7 0.0017 770536 3. require_once('/path/to/jobs/bootstrap.php') /path/to/jobs/config.php:3 0.0020 796264 4. require_once('/path/to/jobs/bootstrap_doctrine.php') /path/to/jobs/bootstrap.php:5 0.1468 7673040 5. Doctrine\ORM\Tools\SchemaTool->createSchema() /path/to/jobs/bootstrap_doctrine.php:53 1.1216 9445080 6. Doctrine\DBAL\Connection->executeQuery() /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/ORM/Tools/SchemaTool.php:90 1.1216 9445656 7. PDO->query() /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/DBAL/Connection.php:646 Doctrine\DBAL\DBALException: An exception occurred while executing 'ALTER TABLE doc_consultant_practice_new ADD CONSTRAINT FK_60C69DE344F779A2 FOREIGN KEY (consultant_id) REFERENCES doc_xml_consultant_new (id) ON DELETE CASCADE': SQLSTATE[HY000]: General error: 1005 Can't create table 'databasename.#sql-220_87' (errno: 121) in /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/DBAL/DBALException.php on line 47 Call Stack: 0.0011 761296 1. {main}() /path/to/jobs/import.php:0 0.0014 767024 2. require_once('/path/to/jobs/config.php') /path/to/jobs/import.php:7 0.0017 770536 3. require_once('/path/to/jobs/bootstrap.php') /path/to/jobs/config.php:3 0.0020 796264 4. require_once('/path/to/jobs/bootstrap_doctrine.php') /path/to/jobs/bootstrap.php:5 0.1468 7673040 5. Doctrine\ORM\Tools\SchemaTool->createSchema() /path/to/jobs/bootstrap_doctrine.php:53 1.1216 9445080 6. Doctrine\DBAL\Connection->executeQuery() /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/ORM/Tools/SchemaTool.php:90 Doctrine\ORM\Tools\ToolsException: Schema-Tool failed with Error 'An exception occurred while executing 'ALTER TABLE doc_consultant_practice_new ADD CONSTRAINT FK_60C69DE344F779A2 FOREIGN KEY (consultant_id) REFERENCES doc_xml_consultant_new (id) ON DELETE CASCADE': SQLSTATE[HY000]: General error: 1005 Can't create table 'databasename.#sql-220_87' (errno: 121)' while executing DDL: ALTER TABLE doc_consultant_practice_new ADD CONSTRAINT FK_60C69DE344F779A2 FOREIGN KEY (consultant_id) REFERENCES doc_xml_consultant_new (id) ON DELETE CASCADE in /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/ORM/Tools/ToolsException.php on line 33 Call Stack: 0.0011 761296 1. {main}() /path/to/jobs/import.php:0 0.0014 767024 2. require_once('/path/to/jobs/config.php') /path/to/jobs/import.php:7 0.0017 770536 3. require_once('/path/to/jobs/bootstrap.php') /path/to/jobs/config.php:3 0.0020 796264 4. require_once('/path/to/jobs/bootstrap_doctrine.php') /path/to/jobs/bootstrap.php:5 0.1468 7673040 5. Doctrine\ORM\Tools\SchemaTool->createSchema() /path/to/jobs/bootstrap_doctrine.php:53
Кто-нибудь знает мою ошибку или лучше понимает резервные столы?
похоже, что у вас есть проблема из-за дублирования имени индекса , таблицы префикса не префиксные индексы для них. Вы должны использовать другую базу данных для такого рода функций, впоследствии вы можете переименовать ее или синхронизировать данные с двумя открытыми соединениями.