小智 23
使用Doctrine截断表是"简单"的:
$connection = $entityManager->getConnection();
$platform = $connection->getDatabasePlatform();
$connection->executeUpdate($platform->getTruncateTableSQL('my_table', true /* whether to cascade */));
Run Code Online (Sandbox Code Playgroud)
但是你必须知道MySQL一旦有外键约束就无法截断任何表.
Jam*_*all 13
您可以通过Doctrine截断MySQL中的数据,以便忽略外键约束......
$connection->executeQuery('SET FOREIGN_KEY_CHECKS = 0;');
$truncateSql = $platform->getTruncateTableSQL('table_name');
$connection->executeUpdate($truncateSql);
$connection->executeQuery('SET FOREIGN_KEY_CHECKS = 1;');
Run Code Online (Sandbox Code Playgroud)
之前,我将答案概括为我在项目中使用过的一个不错的功能,可以随时分享。
/**
* @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;');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15602 次 |
| 最近记录: |