我想在我的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