我正在开发一个使用 Doctrine 的 PHP 项目。问题是对实体的更新没有通过,即数据库没有被更新。代码如下所示:
// findOrGetUser does the lookup for the entity, and will create it if
// it isn't found. $userAccount is a Doctrine entity
$userAccount = findOrGetUser($user);
// setAuthTok is a member function of User, defined in DataObjs.php,
// that sets a property of User
$userAccount->setAuthTok("hello");
$em->flush();
发生的情况是,如果实体在数据库中不存在,则会创建一条记录,并且 authTok 将设置为“hello”。如果没有,它将保留其先前的值(212 位数字)。因此更新将在新创建的记录上进行,但不会在更新场景中进行。
有谁知道发生了什么?
数据库是 MySQL,我尝试了 mysqli 和 pdomysql 驱动程序,它们都做了同样的事情。我尝试在刷新之前添加一个 persist() 调用,但这没有任何区别。
我尝试添加显式事务处理,并且我还查看了 Doctrine 源代码并尽可能地对其进行了跟踪,并且找不到任何错误。
编辑 - 我忘了提到这段代码在测试服务器上工作正常。所以看起来问题是某种配置错误?
这是我在尝试显式事务处理时使用的代码:
try {
$em->getConnection()->beginTransaction();
$userAccount = findOrGetUser($user);
$userAccount->setAuthTok("hello");
$em->persist($userAccount);
$em->flush();
$em->getConnection()->commit();
} catch (Exception $ex) {
fileLog("(" . $ex->getFile() . " " . $ex->getLine() . ") " .$ex->getMessage());
$em->getConnection()->rollback();
$em->close();
throw $e;
}