我想在我的MySQL数据库中清空表格。我怎样才能做到这一点与教条?如何使用Doctrine截断表格?
15
A
回答
21
截断与学说的表是“简单”为:
$connection = $entityManager->getConnection();
$platform = $connection->getDatabasePlatform();
$connection->executeUpdate($platform->getTruncateTableSQL('my_table', true /* whether to cascade */));
但是你要知道,MySQL将无法截断任何表,一旦它有一个外键约束。
12
您可以通过学说,使其忽略外键约束在MySQL截断数据...
$connection->executeQuery('SET FOREIGN_KEY_CHECKS = 0;');
$truncateSql = $platform->getTruncateTableSQL('table_name');
$connection->executeUpdate($truncateSql);
$connection->executeQuery('SET FOREIGN_KEY_CHECKS = 1;');
0
短变异(最有用的迁移)!
Doctrine_Manager::getInstance()->getConnection('doctrine')->getDbh()->exec("TRUNCATE name");
4
我把这个答案推广到一个很好的函数,我已经在我的项目中使用它,随时分享。
/**
* @param array $tableNames Name of the tables which will be truncated.
* @param bool $cascade
* @return void
*/
public function truncateTables($tableNames = array(), $cascade = false) {
$connection = $this->em->getConnection();
$platform = $connection->getDatabasePlatform();
$connection->executeQuery('SET FOREIGN_KEY_CHECKS = 0;');
foreach ($tableNames as $name) {
$connection->executeUpdate($platform->getTruncateTableSQL($name,$cascade));
}
$connection->executeQuery('SET FOREIGN_KEY_CHECKS = 1;');
}
0
如果要删除实体,包括相关的实体最终由外键连接,你可以使用一个简单的DQL批量查询,而不是截断的:
$q = $em->createQuery('delete from AppBundle\Entity\Customer');
$numDeleted = $q->execute();
http://doctrine-orm.readthedocs.org/en/latest/reference/batch-processing.html#dql-delete
这不仅会如果您正确配置级联操作并与关联协同工作,并且orphanRemoval例如:
class Customer
{
/**
* @ORM\OneToOne(targetEntity="Address", cascade={"all"}, orphanRemoval=true)
*/
public $address;
}
这不是关于MySQL TRUNCATE命令的直接答案,但是由于它是通过Doctrine实现的,因此可以解决您的问题。
2
如果你有外键的问题我一起工作:
$connection = $this->em->getConnection();
$connection->beginTransaction();
$connection->query('DELETE FROM reception_detail');
$connection->query('ALTER TABLE reception_detail AUTO_INCREMENT = 1');
相关问题
- 1. 如何使用C#截断表格#
- 2. 如何使用greenDAO截断表格
- 3. 使用LINQ截断表格
- 4. 如何截断HTML表格
- 5. 如何用Spring JdbcTemplate截断表格?
- 6. MySQL表格 - 截断还是不截断?
- 7. 如何截断表格中的文字?
- 8. 如何正确截断表格?
- 9. 如何还原截断的表格
- 10. 如何使用java在Cassandra中截断表格
- 11. 如何使用Telerik OpenAccess ORM截断表格?
- 12. 如何使用CSS截断表格中的长文本?
- 13. 如何在不使用表格截断的情况下重置表格ID 1
- 14. 使用hibernate/hql截断表?
- 15. 如何从截断的表
- 16. 如何使表格截断查询为动态SQL
- 17. 如何截断所有用户表?
- 18. 如何指定大虾截断表格单元格内容?
- 19. HBase:通过Java API截断表使表被截断
- 20. 如何在Java中使用printf截断?
- 21. 如何使用截断的CTE
- 22. 如何截断使用PHP的帖子?
- 23. 如何使用CSS截断文本?
- 24. 如何截断矩阵使用NumPy(Python)
- 25. 截断使用truncate.js
- 26. Azure截断表
- 27. 截断表sqlkorma
- 28. BeautifulSoup截断表
- 29. 截断表?
- 30. 如何截断wp_rss
那么我们如何能够truncat – Acyra 2013-02-02 13:44:41
在MySQL中,你不能在你有外键设置... – Herzult 2013-02-04 08:47:23
`的executeUpdate ()`现在已被弃用。这个答案可以更新吗? – Alec 2015-11-12 12:01:24