我从以下位置升级了旧项目:
PHP 5.6版本-〉8.0
原则/标准2.5.14 -〉2.13.4
条令/数据-固定装置1.2.2 -〉1.5.3
现在,以下代码将引发异常:
PDO例外:/var/www/html/src/供应商/教义/dbal/src/驱动程序/PDO/连接。php:120 /var/www/html/src/供应商/教义/dbal/src/连接。php:1481 /var/www/html/src/供应商/教义/orm/lib/教义/ORM/实体管理器。php:280
use Doctrine\Common\DataFixtures\Loader;
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
$ormPurger = new ORMPurger($entityManager, $exclude);
$ormPurger->setPurgeMode(ORMPurger::PURGE_MODE_TRUNCATE);
$executor = new ORMExecutor($entityManager, $ormPurger);
$executor->execute($loader->getFixtures());
当\Doctrine\ORM\EntityManager::事务性调用时引发异常:
$this-〉连接-〉提交()
在文档中我读到:
不是所有的RDBMS都允许在事务中使用TRUNCATE语句,特别是当我们试图关闭一个已经隐式关闭的事务时,MySQL会产生臭名昭著的There is no active transaction消息。
doctrine-data-fixtures/en/latest/explanation/transactions-and-purging.html
----更新
我可以通过使用默认清除模式PURGE_MODE_DELETE而不是PURGE_MODE_TRUNCATE来修复错误。那么这是否意味着我不能在使用ORMExecutor::execute时使用TRUNCATE操作?
1条答案
按热度按时间qlfbtfca1#
RDBMS(如MySQL)不允许在事务内使用TRUNCATE语句。
ORMExecutor::execute(array $fixture,$append = false)在事务中执行SQL操作,所以我们必须在事务之外执行TRUNCATE操作。
要使用executor而不清除,我们可以将true传递给execute的第二个参数。