教义2移除实体问题 - php

使用实体管理器删除实体时,出现一个奇怪的错误。抛出一个异常,说“通过未配置为级联持久性操作的关系找到了一个新实体”,但我没有新实体。我认为这可能是Doctrine中的一个错误,但是我想先问一下,以确保在填写报告之前我没有做错任何事情。

相关代码:

<?php
$em = Doctrine\ORM\EntityManager::create(array('driver' => 'pdo_sqlite', 'memory' => true), $config);

$qb = $em
    ->getRepository('Bar')
    ->createQueryBuilder('bar1')
    ->select('bar1, foo1, bar2')
    ->join('bar1.foo', 'foo1')
    ->join('foo1.bar', 'bar2')
;

$qb->getQuery()->getResult();

$bar = $em->getRepository('Bar')->findOneBy(array('id' => 20));

$em->transactional(function($em) use ($bar) {
    $em->remove($bar);
    $em->flush();
});

如果我删除包裹了remove和flush操作的$em->transactional,则删除工作。另外,如果我删除了上一个查询的$qb->getQuery()->getResult();,则remove和flush调用也有效。

我得到的错误是:

致命错误:消息未捕获的异常“ InvalidArgumentException”通过未配置为级联持久性操作的关系找到:Bar @ 0000000049dcca970000000025d8d6f9。明确保留新实体,或在关系上配置级联的持续操作。”在doctrine2-orm / lib / Doctrine / ORM / UnitOfWork.php:576中
堆栈跟踪:
#0 doctrine2-orm / lib / Doctrine / ORM / UnitOfWork.php(495):主义\ ORM \ UnitOfWork> computeAssociationChanges(Array,Object(Doctrine \ ORM \ PersistentCollection))
#1 doctrine2-orm / lib / Doctrine / ORM / UnitOfWork.php(537):教义\ ORM \ UnitOfWork-> computeChangeSet(Object(Doctrine \ ORM \ Mapping \ ClassMetadata),Object(Foo))
#2 doctrine2-orm / lib / Doctrine / ORM / UnitOfWork.php(256):Doctrine \ ORM \ UnitOfWork-> computeChangeSets()
#3 doctrine2-orm / lib / Doctrine / ORM / EntityManager.php(334):doctrine2-orm / lib / Doctrine / ORM / UnitOfWork.php中的Doctrine \ ORM \ UnitO

在此gist中可以找到完整的工作示例。

参考方案

我在填写bug report之后终于弄清楚了这一点。

transactional在内部进行刷新,并且两次刷新会导致此问题。我认为两次冲洗不会破坏事情,但我没有提出这一点。

话虽如此,我并没有正确使用transactional,Doctrine 2具有隐式事务,除了在非常特殊的情况下,不需要将数据库调用包装在transactional中。

从《 Doctrine 2》文档中

当您想在工作单元中包含自定义DBAL操作时,或者要使用EntityManager API的某些需要活动事务的方法时,需要显式事务划分。此类方法将引发TransactionRequiredException来通知您该要求。

验证IBAN PHP - php

在设计新平台时,我们尝试集成IBAN编号。我们必须确保IBAN已经过验证,并且存储在数据库中的IBAN始终正确。那么验证数字的正确方法是什么? 参考方案 正如我在其他问题中解释的逻辑一样,我尝试自己创建一个函数。根据Wikipedia文章中解释的逻辑,在下面找到合适的功能。国家特定验证。它适合吗http://en.wikipedia.org/wiki/Int…

PHP:对数组排序 - php

请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…

php:将分钟取整到最近的四分之一小时,然后执行更多操作 - php

最初的问题是这样的:取分钟数->转换为四分之一小时-> 1个四分之一小时为1个单位->输出单位我今天整天都在整理页面,几分钟前我的大脑就停止工作了,我只是不知道如何输出单位数量。我知道在此网站上发布问题会有所帮助。因此,用户输入的分钟数(不是小时和分钟,而是数分钟),站点需要输出单位数量。单位是一个刻钟。分钟总是四舍五入到最近的四分之一小时…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…