【发布时间】:2019-05-31 13:51:47
【问题描述】:
我正在尝试迭代结果并使用实体管理器将其删除,如https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/batch-processing.html#iterating-results中所述
但是,在调用 flush() 时出现以下错误:
PHP 致命错误: Uncaught Doctrine\DBAL\Driver\SQLSrv\SQLSrvException: SQLSTATE [42000, 3988]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]不允许新事务,因为还有其他线程在会话中运行。在 D:\inetpub\wwwroot\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\SQLSrv\SQLSrvException.php:54
<?php
$batchSize = 20;
$i = 0;
$q = $em->createQuery('select u from MyProject\Model\User u WHERE credit < :minCredit');
$q->setParameter('minCredit', 20);
$iterableResult = $q->iterate();
while (($row = $iterableResult->next()) !== false) {
$em->remove($row[0]);
if (($i % $batchSize) === 0) {
$em->flush();
$em->clear();
}
++$i;
}
$em->flush();
【问题讨论】:
标签: php sql-server pdo doctrine-orm doctrine