我有现有的数据库(不与原则管理)的工作,我想用教条仅对该数据库的新表。
有没有办法告诉学说不删除整个DB上重装,但在只定义模型yaml
文件?
我有现有的数据库(不与原则管理)的工作,我想用教条仅对该数据库的新表。
有没有办法告诉学说不删除整个DB上重装,但在只定义模型yaml
文件?
我知道这是一个非常古老的问题,看来你正在使用的symfony。
尝试:
app/console --env=prod doctrine:schema:drop --full-database
这将降低在数据库中的所有表。
对于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();
我的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);
}
老问题,但增加了对未来的灵魂。
基于Meezaan ud声浪的答案很快发现它的Zend Framework 3 + 2原则
./vendor/bin/doctrine-module orm:schema-tool:drop --full-database -f --dump-sql
不要在生产中不能使用
orm:schema-tool:drop
到“滴”数据库 --full-database
消灭在数据库中的一切是由原则管理 ! --force
(或-f
) --dump-sql
来显示正在执行的SQL。 可以与结合-f
标志。 执行完整的代码在类中: \Doctrine\ORM\Tools\Console\Command\SchemaTool\DropCommand
你可以找到我用来截断从数据库中的所有表在这个要点的任务: https://gist.github.com/1154458
核心代码是:
$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;'));
是的,当然,你可以使用原则仅适用于某些表(不是全部)。 而且它不会删除所有其他表,除非你手动运行
$manager->dropDatabases();
这是你如何开始使用Doctine为您的新表:
设置DB连接
安装学说的文件/目录结构
使用命令行界面 ,以便自动生成基于数据库表(可以手动删除unncessesary机型)全部学说模型(和架构)。
@ gpilotino是的,我有一个类似的问题。 似乎有没有办法从内部PHPUnit的删除和重建数据库,(Symfony的测试的未来)。
也许这是在“石灰”可能的话,我不知道。
所以,我有写反 - 即备份所有数据从数据库中,然后重置所有序列,这样我可以做自动化测试>保存()函数。
对于那些不希望在我的挫折我都尝试遵循谁:
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)从symfony的外部执行它,而PHP的内部:
Doctrine_Manager::getInstance()->getCurrentConnection()->close();
exec('./symfony doctrine:build --all --and-load --no-confirmation');
我关闭了连接的原因是Postgres的,MDBOC(我选择的DB)不会下降,有一个连接的数据库。 也许仍然是某种问题。 我告诉你,这是从来没有的简单教程显示一样容易。 而且这更糟糕的与microslop产品。