2011-07-31 2 views
2

私のモデルでは、現在ORMにRedBeanを使用しています。ORM(RedBean)と重複キー

カラムの1つが一意に設定されているMySQLテーブルにデータを挿入する必要があります。

現在、データはそうのようなフォームから挿入されている:

//Create 
$object = R::dispense('object'); 

//Need to check if supplied name is a duplicate 
$object->name = $name 
$object->description = $description 

//Save 
R::store($object) 

今の問題は、$名がデータベースに複製されなかった場合は、すべてがうまくいくということです。それが重複している場合は、私は例外をキャッチし、SQLエラー・コードを取得することができます:私は例外をエコー場合は23000

を、私が手:

[23000] - SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'abc' for key 'name_UNIQUE' 

もう一つの問題は、私は複数のフィールドを持っている場合であるということですUNIQUEに設定すると、例外は重複している最初のフィールドのみを通知します。したがって、次のフィールドを取得するには、ユーザーが最初の複製を修正してからクエリを再度実行する必要があります。

これは非常に非効率的なようです。あまりにも多くのSQL文を実行しないで、複数のフィールドに重複データを挿入したかどうかを確認する必要があります。

これを行うためのベストプラクティスは何ですか?アクションが成功したのか、失敗したのか、なぜ、そしてどのフィールドがコントローラに戻ったのかを返すことについては、ベストプラクティスは何ですか?

ありがとうございました:)

答えて

0

をあなたが最初のユニークなエントリがすでに他の方法がない...あなたはあなたからの複数の要求を実行したくない場合は、存在しないことを確認する「を選択」を実行しなければなりませんコードでは、ストアドプロシージャを実装できます。

これは、同じトランザクション内で複数の要求を実行できるようにし、ネットワークのオーバーヘッドを制限します。

また、エラーコード(AFAIR)によって複数の種類のエラーを管理できるため、問題のあるフィールドを明確に識別できます。

役に立てば幸いthis link

をチェック!