mysqlに「IFrecordEXISTSTHENUPDATEELSEINSERT」を実装しようとしています。具体的には、DoctrineORMでそれを行う方法を理解する必要があります。
ネイティブMySqlを使用する1つの解決策は、「ONDUPLICATEKEYUPDATE」を使用することです。残念ながら、これはDoctrineではサポートされていません。
もう1つの半解決策は、「REPLACEINTO」構文を使用することです。Doctrineはこれをサポートしていますが、REPLACEはレコードを更新せず、代わりにレコードを削除して新しいレコードを作成します(新しい自動インクリメントIDを使用)。このため、私のように自動インクリメントIDに依存する場合は悪い解決策です。 。
私が操作しようとしているテーブルはINNODBであるため、トランザクションを調べましたが、トランザクションの外部で適用されるのと同じルールがトランザクションの内部で適用されるかどうかは完全には理解していません。
トランザクション内で「IF(INSERTIGNORE INTO table critical_id
= $ id)THEN exit ELSE(UPDATE table SET field
='new_value')」と言うことはできますか?
そのようなことが言えない場合、この問題の解決策はありますか?