我正在使用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位數字)。因此更新將通過新創建的記錄進行,但不會在更新方案中進行。
有沒有人有任何想法是怎麼回事?
DB是MySQL,我嘗試了mysqli和pdomysql驅動程序,它們都做了同樣的事情。我嘗試在flush之前添加一個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;
}
只是拋出這個,但不應該''userAccount->堅持()'第一? – hank