С помощью Доктрина и Symfony 4.1 я создаю объект User с помощью UniqueEntity
/**
* User
*
* @ORM\Entity(repositoryClass = "App\Repository\UserRepository")
* @ORM\Table(name = "user")
* @UniqueEntity(
* fields = "email",
* message = "email.already_taken"
* )
*/
class User {
...
INSERT) выдается ошибка: хорошоUPDATE) пользователя с другим существующим адресом электронной почты, у меня появляется ошибка: фиговоAn exception occurred while executing 'UPDATE user SET email = ? WHERE id = ?' with params ["[email protected]", 14]:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '[email protected]' for key 'UNIQ_8D93D649E7927C74'
Почему UniqueEntity не тестирует обновление?
Да, я использую форму Symfony :)
Не могли бы вы отредактировать свой вопрос с помощью фрагментов контроллера и формы?
Подождите, попробуйте этот fields = {"email"}




вы можете добавлять группы в ограничение groups = {"new", "edit"}. Затем используйте эти группы в формах, подобных описанному здесь
Как мы это делаем для API?
Может быть, попробовать проверить сущность перед сбросом? https://symfony.com/doc/4.1/validation.html#using-the-validator-service
$errors = $validator->validate($updatedUser);
if (count($errors) > 0) {
$errorsString = (string) $errors;
return new Response($errorsString);
}
Ошибки должны содержать информацию о том, что пользователь уже существует.
Для объявления вам необходимо добавить обратные вызовы жизненного цикла и добавить Doctrine UniqueConstraint.
use Doctrine\ORM\Mapping\UniqueConstraint;
/**
* User
* @ORM\HasLifecycleCallbacks()
* @ORM\Entity(repositoryClass = "App\Repository\UserRepository")
* @ORM\Table(name = "user", uniqueConstraints{@UniqueConstraint(columns = {"email"})})
* @UniqueEntity(
* fields = "email",
* message = "email.already_taken"
* )
*/
class User {}
/**
* @ORM\PrePersist
*/
public function setCreatedAtValue()
{
$this->createdAt = new \DateTime();
}
больше информации https://symfony.com/doc/4.1/doctrine/lifecycle_callbacks.html
Вы используете формы Symfony?