$added_obj = [];
foreach ($something as $data) {
$obj = $this->class->function($data, $par2);
if (null !== $obj && !(array_key_exists
(->getVal1(), $added_obj[$obj->getVal1()] === $$obj->getVal2())) {
$this->persister->persist($obj);
$added_bank_account[$obj->getVal1()] = $obj->getVal2();
} else {
}
}
代码的作用:它调用一个返回实体或 null 的函数。如果创建了一个实体,则会检查数组中是否已存在 2 个值,如果不存在,则保留并将这 2 个值作为键/值对添加到数组中。
但是,当创建一个实体并且它已经存在于数组中时,我不希望它被持久化,但我不想对它执行任何操作。
但是,当我用它进行绝对归零时,我收到了错误: ```通过给定的关联图找到多个非持久的新实体:
这是有道理的,因为教义不知道如何处理被创造的实体。如何才能“销毁”所创建的实体,从而解决问题。
当仅创建 1 个对象时,一切正常。
在您的情况下,您可以简单地
merge
或 clear
来自 entity
的
EntityManager
例如:
$em->merge($obj);
或
$em->clear($obj);
我遇到了同样的问题,因为它试图在特定表中插入重复的注册表,而实际上我只是想更新它。
之后我正在做一个
persist
和一个flush
。
所以我发现(对很多人来说显而易见,但肯定有帮助):
->合并
如果 id 设置不正确,在许多情况下会重复注册表。
如果您尝试更新实体,这不是一个好主意。
->坚持
同样,如果您尝试更新一个实体,您可能不会使用它。它用于向数据库添加新实体。要更新记录,您只需使用
flush
,如文档中的此示例所示。
我遇到了同样的问题,谷歌搜索这个错误并没有给我太多结果,但似乎在只有一个实体(而不是多个)的情况下,学说会给出不同的错误消息,它也有一个适用于多个实体的解决方案。所以,让我在这里留下一个链接:Doctrine - 通过关系找到了一个新实体
如果您在另一个对象管理器中获取了相关实体,则会出现此问题。例如,如果之前通过异常检查重复并重置管理器。