简体   繁体   中英

Doctrine Backuptables

is there any way to make Backup Tables in Doctrine 2.

I have an XML and want to import it every day with an cron job. First I create a new Schema with the end _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);
}

After it i import the data from xml. And is all okay, i rename the Tables

$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();

But when i want to import again, i get the following error . . . . . :(

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

Do anybody know my mistake or have an better idea to realize backup tables?

it looks like you have an issue because of index name duplication, prefixing tables does not prefix indexes for them. You should use a different database for that kind of functionality, you can rename it afterwards or sync data with two connections opened.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM