Doctrine を使用する PHP プロジェクトに取り組んでいます。問題は、エンティティへの更新が行われていないことです。つまり、DB が更新されていません。コードは次のようになります。
// 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();
エンティティが DB に存在しない場合、レコードが作成され、authTok が「hello」に設定されます。そうでない場合は、以前の値 (212 桁の数字) が保持されます。そのため、更新は新しく作成されたレコードで行われますが、更新シナリオでは行われません。
何が起こっているのか誰にも分かりませんか?
DBは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;
}