教义 ORM "Multiple non-persisted new entities were found through the given association graph:"


$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个值作为键/值对持久化并添加到数组中。

但是,当一个实体被创建并且已经存在于数组中时,我不希望它被持久化,但我不想对它做任何事情

但是,当我用它做绝对零时,我得到了错误:```通过给定的关联图发现了多个未持久化的新实体:

  • 通过关系"MyCompany\Client\entity\Client#something"发现了一个新实体,该实体未配置为级联实体的持久操作:

这是有道理的,因为条令不知道该如何处理被创建的实体。如何"销毁"创建的实体,以便解决问题。

当只创建了一个对象时,一切都很好。

在您的情况下,您可以简单地从EntityManagermergeclearentity

例如:

$em->merge($obj);

$em->clear($obj);

我遇到了同样的问题,因为它试图在特定的表中插入一个重复的注册表,而实际上我只是试图更新它。

我在做persist之后的flush

所以我发现(对很多人来说很明显,但肯定很有帮助(:

->如果id设置不正确,merge
在许多情况下会复制注册表。如果您正在尝试更新实体,这不是一个好主意。

->persistent
同样,如果您试图更新实体,则可能不会使用它。它用于向数据库添加新实体。要更新记录,您可以只使用flush,正如您在本例中从文档中看到的那样。

我遇到了同样的问题,在谷歌上搜索这个错误并没有给我太多结果,但似乎在只有一个实体(而不是多个(的情况下,学说会给出不同的错误消息,它有一个适用于多个实体的解决方案。所以,让我在这里留下一个链接:条令-通过关系发现了一个新的实体

如果在另一个对象管理器中获得相关实体,就会出现此问题。例如,如果以前通过异常检查重复并重置管理器。

相关内容

  • 没有找到相关文章

最新更新