В настоящее время я использую RedBean для ORM в своих моделях.
Мне нужно вставить данные в таблицу 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'
Другая проблема заключается в том, что если у меня естьнесколько полей, которые установлены в UNIQUE, исключение скажет мне только первое поле, которое дублируется.Поэтому, чтобы получить следующее поле, мне нужно убедиться, что пользователь исправляет первый дубликат и снова выполняет запрос.
Это кажется довольно неэффективным.Мне нужно иметь возможность проверить, вставил ли пользователь дублирующиеся данные в несколько полей, не выполняя при этом слишком много операторов SQL.
Каковы некоторые рекомендации для этого?Кроме того, какова лучшая практика, когда дело доходит до того, было ли действие успешным, или если при неудаче, почему и какие поля возвращаются в контроллер?
Спасибо:)