合并在学说2不工作给出错误

时间:2015-01-07 12:40:15

标签: doctrine-orm merge

我正在尝试更新表格中的一行。我正在使用doctrine 2 ORM。我正在尝试使用merge()更新一行,据说可以用来更新一行。但它提出错误说

  

致命错误:未捕获的异常' PDOException' with message' SQLSTATE [23000]:完整性约束违规:1062重复条目

我是学说2的新手。请建议我该怎么做?

1 个答案:

答案 0 :(得分:4)

何时合并

首先关闭:当您拥有一个不是由EntityManager管理的实体时,您只需要$em->merge(),但您希望它是。一个常见的用例是当你有一个序列化的实体,并希望EntityManager开始管理它。

因此,合并实体与更新数据库中的实体直接相关。

如果您只是找到(使用$repo->find*())实体并进行更改,则调用$em-flush()即可。实体已由EntityManager管理,无需合并。

如何合并

使用$em->merge()时常见的错误是传递的实体本身变得受管理。事实并非如此,$em->merge()会返回代表管理实体的新对象

$managedEntity = $em->merge($detachedEntity);

在这行代码之后,$detachedEntity仍然被分离(意味着它仍然不是由EntityManager管理的)。它是$managedEntity,您可以开始使用它来进行更改。

您的代码

考虑到您在评论中添加的代码,您可能希望执行以下操作:

$user = $entityManager->getRepository('User')->find($_REQUEST['id']);

$user->setName($_REQUEST['name']);
$user->setPassword($_REQUEST['pass']);

$entityManager->flush();

PS:看起来你正在保存数据库中的纯文本密码。这绝不是一个好主意。