2

現在、モデルで 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)

ここでの問題は、$name がデータベースで複製されていなければ、すべてうまくいくということです。重複している場合は、例外をキャッチして SQL エラー コード 23000 を取得できます。

例外をエコーすると、次のようになります。

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

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

これはかなり効率が悪いようです。あまりにも多くの SQL ステートメントを実行せずに、ユーザーが複数のフィールドに重複データを挿入したかどうかを確認できる必要があります。

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

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

4

1 に答える 1