私はいくつかの記事を調べましたが、実際の解決策を見つけることができませんでした。Symfony 2 + Doctrine:SQLSTATE [23000]を鎮圧する方法:整合性制約違反:1062重複したエントリ
私の質問はシンプルを超えて:
私は実体を持ってid
、url
とtitle
言います。 URLは一意である必要があります(MySQL PDOの場合)。エンティティとスキーマの両方を問題なく作成することができました。今私はいくつかのレコードを歩いて、私はそれぞれpersist()
と呼び、最終的にはflush()
です。問題は、URLの重複エントリを挿入しようとすると、例外が発生するということです。それを抑圧するには?
重複したエントリが挿入されている場合、それをスキップして残りの部分を挿入するだけです。イベント、ON UPDATEステートメント、トリガー、そしてすばらしいものは必要ありません。
私はpersist
またはflush()
でスローされた例外をキャッチしようとしましたが、実際には正しく動作していないようです。
アイデアは大歓迎です、ありがとうございます!
編集:ここに私の解決策が見つかりました:Symfony2 Controller won't catch exception
を示唆したステートメントを使用します、それをキャッチするために、私は(私はsymfonyのに新たなんだ)どこでどのようにそれを書くことは本当にわからないけど、ドキュメントから、私は '注釈を得ました@ ORM \ Column(..、unique = true) 'を返しますが、それでもSQLエラーが発生します。興味深いのは、このエラーはDoctrineではなくMySQLであるということです。 Doctrineは、(パフォーマンスに関する限り)許容できないデータベース内の個々のチェックを行わずに値が存在するかどうかを知る方法がありません。 –
一意のアノテーションがその列に一意のインデックスを指定するため、エラーはMySQLから発生します。データをデータベースに挿入する前に、データが正しいことを検証する必要があります。 (複数の)例外をキャッチするのは、コストのかかる操作です。挿入に先立ってデータを検証するのは良いことです。 –
私は理解していますが、コストのかかるデータベースチェックを行わずに、エンティティ内のフィールドがデータベース内で一意であることをどのように検証できますか? –