条令ORM:删除所有表而不删除数据库

条令ORM:删除所有表而不删除数据库,orm,doctrine,Orm,Doctrine,我必须使用一个现有的数据库(不是用条令管理的),我只想对这个数据库中的新表使用条令 有没有办法告诉Doctrine不要在重新加载时删除整个DB,而只删除yaml文件中定义的模型?@gpilotino是的,我遇到了类似的问题。似乎无法从PHPUnit(Symfony测试的未来)中删除和重建数据库 也许在《莱姆》里有可能,我不知道 因此,我必须编写一个reverse->save()函数,将所有数据从数据库中备份出来,然后重置所有序列,以便进行自动测试 对于那些不想在我的挫折中追随我的人,我尝试了两种

我必须使用一个现有的数据库(不是用条令管理的),我只想对这个数据库中的新表使用条令


有没有办法告诉Doctrine不要在重新加载时删除整个DB,而只删除
yaml
文件中定义的模型?

@gpilotino是的,我遇到了类似的问题。似乎无法从PHPUnit(Symfony测试的未来)中删除和重建数据库

也许在《莱姆》里有可能,我不知道

因此,我必须编写一个reverse->save()函数,将所有数据从数据库中备份出来,然后重置所有序列,以便进行自动测试

对于那些不想在我的挫折中追随我的人,我尝试了两种方法:

1) 使用symfony内部的任务:

  $optionsArray=array();
  $argumentsArray=array();

  $optionsArray[]="--all";
  $optionsArray[]="--and-load";
  $optionsArray[]="--no-confirmation";

  $task = new sfDoctrineBuildTask($configuration->getEventDispatcher(), new sfFormatter());
  $task->run($argumentsArray, $optionsArray);
2) 在PHP内部从symfony外部执行:

  Doctrine_Manager::getInstance()->getCurrentConnection()->close();
  exec('./symfony doctrine:build --all --and-load --no-confirmation');

我关闭连接的原因是Postgres、MDBOC(我选择的数据库)不会删除具有连接的数据库。可能还是有些问题。我告诉你,这从来没有简单的教程那么简单。microslop产品的情况更糟。

您可以找到我用来截断数据库中所有表的任务,要点如下:

核心代码是:
        $this->dbh = $connection->getDbh();
        $this->dbh->query(sprintf('SET FOREIGN_KEY_CHECKS = 0;'));
        $tables = $connection->import->listTables();
        foreach ($tables as $table)
        {
          $this->dbh->query(sprintf('TRUNCATE TABLE %s', $tableName));
        }
        $this->dbh->query(sprintf('SET FOREIGN_KEY_CHECKS = 1;'));

我知道这是一个非常古老的问题,而且您似乎正在使用symfony

尝试:


这将删除数据库中的所有表。

我的2美分,如果您想通过Php执行此操作:

    $em = ....getContainer()->get('doctrine')->getManager();

    $metaData = $em->getMetadataFactory()->getAllMetadata();

    $tool = new \Doctrine\ORM\Tools\SchemaTool($em);
    $tool->dropSchema($metaData);
    $tool->createSchema($metaData);
这有点慢,您还可以从所有表中删除所有数据:

$em = getContainer()->get('doctrine.dbal.default_connection');

foreach($em->getSchemaManager()->listTableNames() as $tableName)
{
  $em->exec('DELETE FROM ' . $tableName);
}
bin/console doctrine:schema:drop --full-database --force
对于Symfony 3:

$entityManager = $container->get('doctrine.orm.entity_manager'); 

$entityManager->getConnection()->getConfiguration()->setSQLLogger(null);

$entityManager->getConnection()->prepare("SET FOREIGN_KEY_CHECKS = 0;")->execute();

foreach ($entityManager->getConnection()->getSchemaManager()->listTableNames() as $tableNames) {
        $sql = 'DROP TABLE ' . $tableNames;
        $entityManager->getConnection()->prepare($sql)->execute();
}
$entityManager->getConnection()->prepare("SET FOREIGN_KEY_CHECKS = 1;")->execute();

老问题,但增加了未来的灵魂

基于Zend Framework 3+条令2的快速查找

./vendor/bin/doctrine-module orm:schema-tool:drop --full-database -f --dump-sql
请勿在生产中使用

  • orm:schema工具:drop
    到“drop”数据库
  • ——完整数据库
    清除数据库中由条令管理的所有内容
  • 要执行,必须使用
    --force
    (或
    -f
  • --转储sql
    以显示正在执行的sql。可与
    -f
    标志组合使用

在类中找到执行的完整代码:
\doctor\ORM\Tools\Console\Command\SchemaTool\DropCommand
我使用此Symfony命令删除所有表:

$em = getContainer()->get('doctrine.dbal.default_connection');

foreach($em->getSchemaManager()->listTableNames() as $tableName)
{
  $em->exec('DELETE FROM ' . $tableName);
}
bin/console doctrine:schema:drop --full-database --force

我在收到警告消息后添加了flag--force。

要从另一个命令内部运行命令
bin/console-doctor:schema:drop--force
,请尝试以下操作:

$command=$this->getApplication()->find('doctrine:schema:drop');
$returnCode=$command->run(新数组输入(['--force'=>true]),$output);

过时,在当前版本的条令中不起作用。它将显示条令的作用--force属性将删除DB。不要在生产中使用它我的朋友也可以使用TRUNCATE。在清除数据库时遇到问题时非常有用。由于外键约束,您的第二个建议将无法用于任何关联