0

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;
}
4

1 に答える 1